1171: 换硬币
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3 Solved: 2
[ Submit][ Status][ Web Board]
Description
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
Input
第一行一个整数t,表示有t组测试数据。 接下来t行,每行有一个正整数N,N小于32768。
Output
输出兑换方法数,每组输出占一行。
Sample Input
2
2934
12553
Sample Output
718831
13137761
思路:递推。先求出只有1,2两种硬币时候有多少种兑法a[i],然后对于b[i]=a[i]+a[i-3]+...就是说在有0,1,2个3分硬币时的兑法。
AC代码如下:
#include<cstdio>
#include<cstring>
using namespace std;
int a[40010],b[40010];
int main()
{ int t,i,j,k;
for(i=1;i<=32768;i++)
a[i]=i/2+1;
b[0]=1;b[1]=1;b[2]=2;
for(i=3;i<=32768;i++)
b[i]=b[i-3]+a[i];
scanf("%d",&t);
while(t--)
{ scanf("%d",&k);
printf("%d\n",b[k]);
}
}