Problem Description
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
Input
每行只有一个正整数N,N小于32768。
Output
对应每个输入,输出兑换方法数。
Sample Input
2934
12553
Sample Output
718831
13137761
这是一题套用母函数模板的经典题,一开始的时候超时,因为把求c[i]放在了while循环里,后来wa因为开数组的时候,没开到32769开到32768,然后for循环里面又把条件写到了32768。
#include<stdio.h>
int c[32769];
int temp[32769];
int n;
int i,j,k;
int main()
{
for(i=0;i<=32768;i++)
{
c[i]=1;
temp[i]=0;
}
for(i=2;i<=3;i++)
{
for(j=0;j<=32768;j++)
for(k=0;k+j<=32768;k+=i)
temp[k+j]+=c[j];
for(j=0;j<=32768;j++)
{
c[j]=temp[j];
temp[j]=0;
}
}
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",c[n]);
}
}