[原创]硬币问题的解答
:居然发了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编辑过]