钱币兑换问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5660 Accepted Submission(s): 3250
Problem Description
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
Input
每行只有一个正整数N,N小于32768。
Output
对应每个输入,输出兑换方法数。
Sample Input
2934 12553
Sample Output
718831 13137761
#include<stdio.h>
#include<string.h>
int c1[32769],c2[32769];
int main()
{
int N;
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
int i,j,k;
for(i=0;i<=32768;++i)
c1[i]=1,c2[i]=0;
for(i=2;i<=3;++i) // 打标,否则会超时!!!!!!!
{
for(j=0;j<=32768;++j)
for(k=0;k+j<=32768;k+=i)
c2[k+j]+=c1[j];
for(k=0;k<=32768;++k)
c1[k]=c2[k],c2[k]=0;
}
while(~scanf("%d",&N))
printf("%d\n",c1[N]);
return 0;
}