HDU-1248-钱币兑换问题

在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。

Input

每行只有一个正整数N,N小于32768。

Output

对应每个输入,输出兑换方法数。

Sample Input

2934
12553

Sample Output

718831
13137761

只有3个硬币,范围是32768,可以一个一个枚举硬币,如果只放价值为1的硬币,从d[1]递推到d[n];如果再加上价值为2的硬币,那么就从d[2]递推到d[n];在加上价值为3的硬币,就从d[3]递推到d[n].递推公式是d[j] = d[j] + d[j-i]; d[j]表示j有几种只用1,2, 3这三个数字的拆分方法,i 就是硬币的价值.

AC代码如下:

#include
#include
#include
#include
using namespace std;	
int main()
{
	int n;
	int m;
	int dp[105][105];
	long long a[100005];
		memset(dp,0,sizeof(dp));
		memset(a,0,sizeof(a));
		a[0]=1;
		for(int i=1;i<=3;i++)
		{
			for(int j=1;j<33000;j++)
			{
				a[j]+=a[j-i];
			}
		}
		while(~scanf("%d",&n))
			printf("%lld\n",a[n]);	
	return 0;
}

 

你可能感兴趣的:(dp动态规划)