您的位置:首页 > 其它

USACO解题思路分析记录(Money System)

2015-03-27 15:41 155 查看
自我步入研究生阶段以来,我就一直打算把自己的编程能力提高,不知道当我真正开始这样做的时候是否已经太晚。毕竟,我已经快25周岁了。我从大约三周前开始决定把USACO的题目刷一遍,之所以这样做,是因为我以前就接触了这个在线评测的网站,当时觉得非常好,但是当时的毅力不行,就没有做出几题就搁置了。当我重新捡起来,已经是许多年后的现在了。我期望通过这样的练习,能够把自己的编程水平提高到自己期望的水平。至于是什么水平,我自己是有明确的目标的,只是在这网络上,我不想说出来而已。虽然这篇文章写出来估计也不会有几个人看的,但是我还是期望有一天,自己写的博客能够有一定的水平。好了,今天的废话就先到这里,我开始写我第一篇博客的正文了。
题目就不再赘述了,可以在网络上找到。看到这题的直觉是,直接用枚举法举出所有的可能。但是仔细一算就觉得不太可能,因为这样的组合有几乎无穷多个。于是,我开始找动态规划法来解决。对于一个整数N,一定是有V中货币中的几种组成的。假设使用贪婪法找出一种总的纸币数量最少的组合的话,对于面额最大的货币的数量是所有的满足条件的组合中该种货币的最大值。假设最大的货币面额是Y,贪婪算法得出该种面额的最大数量是n,那么可以把原问题划分为最大面额数量分别为(i=0,1,...n)的几个子问题,在这些子问题中,需要用(V-1)种货币组合出(N-i*Y)的钱。对于这些子问题,都用递归的方法进行解答。当然,在调用递归时,需要加入记录用的数组,以实现动态规划,达到节约时间的效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: