Problem Description
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
Input
每行只有一个正整数N,N小于32768。
Output
对应每个输入,输出兑换方法数。
Sample Input
2934
12553
Sample Output
718831
13137761
思路
其实就是完全背包问题,采用动态规划求解
code
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int MAX = 32769;
long long data[MAX];
int main()
{
int m = 0;
memset(data, 0, sizeof(data));
data[0] = 1;
for(int j = 1; j <= 3; ++ j)
{
for(int i = 1; i <= MAX; ++ i)
{
if(i >= j)
{
data[i] += data[i-j];
}
}
}
while(cin >> m)
{
cout << data[m] << endl;
}
return 0;
}