:居然发了2次错误,
用动态规划就可以AC,如果用简单搜索,ACM的题目大部分是要超时的。
建立数组A[N]N=输入值*100+1;为了方便说明,A[0]没用
初始化A[N]使A[1],A[5],A[10],A[25],A[50]。为1,其他为0
然后for(i=2;i<N*100+1;i++)A[i]=A[i]+A[i-1]+A[i-5]+A[i-25]+A[i-50]/*注意这里要在下标合法的情况下,下标不合法就不加*/
最后输出A[N*100]的值就可以了;当然这个算法对空间要求比较高,其实还可以优化,
大家注意A[I]的值最多和它的前50个有关,其实用一个大小为50的循环数组就可以了――大家不妨去想一想
[此贴子已经被作者于2004-11-21 16:17:24编辑过]
----------------解决方案--------------------------------------------------------
如果你细心,会发现上面的算法并不是正确的,
上面的算法是建立在对I分有N种方法的话,那对I+1分必然存在对应的N种方法――这个没错
错就在于粗心的乌鸦忘记重判了,如果按上面的算法1 5,和5 1将被看成2种不同的方法,
其实只要用集合的容斥原理就可以解决这个问题。
举个比较简单的例子,假如硬币只有1 5两种,那动态转移方程应该改为A[i]=A[i-1]+A[I-5]-A[i-6];
好了,因为时间的关系,上学去了,
----------------解决方案--------------------------------------------------------
哈哈,在csdn发了张无聊帖,被骂傻了。哈哈……我觉得这里比csdn好,人人不高手,把自己放得不高,csdn大家都觉得自己是高手,把自己摆得很高,其实是个P。
http://community.csdn.net/Expert/topic/3573/3573313.xml?temp=.8515131
----------------解决方案--------------------------------------------------------
唉..............真是无语了.........
还没搞好?
----------------解决方案--------------------------------------------------------
随便说了下csdn的人垃圾,就被骂了狗血淋头,其实csdn高手不多,而且没修养,没量度。
----------------解决方案--------------------------------------------------------
我发帖,吵架的人多,站出来褒贬时弊的人多,解决问题的少。
----------------解决方案--------------------------------------------------------
对了live你那几题都解决了吗
----------------解决方案--------------------------------------------------------
没啊,是有两类,每一类挑一题做就行了,我挑了硬币和最佳旅行路径那题,做得头晕,其他的你喜欢可以做,全部都是ACM大赛的题。
----------------解决方案--------------------------------------------------------
不错不错!我们都是热心的!!
----------------解决方案--------------------------------------------------------