题目链接

Problem Description

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

Input

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

Output

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

Sample Input

2934
12553

Sample Output

718831
13137761

分析:

这道题应该是一个动态规划的问题,但是也可以转换为数学的问题来解决。

背包代码:

include

include<stdio.h>

include

using namespace std;
int main()
{
int dp[32770]={0},i,j;
dp[0]=1;
for(i=1;i<=3;i++)
for(j=i;j<32768;j++)
dp[j]+=dp[j-i];
int n;
while(~scanf("%d",&n))
{
printf("%d\n",dp[n]);
}
return 0;
}

非背包的解法:

include

include<stdio.h>

include

using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
int sum=0,i;
for(i=0;;i++)
{
if(3i<=n)
sum=sum+(n-3
i)/2+1;
else
break;
}
printf("%d\n",sum);
}
return 0;
}

posted on 2017-04-26 08:51  渡……  阅读(340)  评论(0)    收藏  举报