题目:
给定不同面额的硬币和一个总金额(面额、硬币数、总金额均不超过 10)。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。
输入:
5
1 2 5
输出:
4
解释: 有四种方式可以凑成总金额:
5=5
5=1+2+2
5=2+1+1+1
5=1+1+1+1+1
参考学习链接:硬币问题
代码(C++完整代码):
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int change(int amount, vector<int>& coins)
{
int len = coins.size();
vector<int> dp(amount+1,0);
dp[0] = 1;
for (int i=0;i<len;i++)
{
for (int j = coins[i]; j <= amount; j++)
{
dp[j] += dp[j - coins[i]];
}
}
return dp[amount];
}
};
int main()
{
Solution sol;
int amount;
cin >> amount;
vector<int> nums;
int i;
while (cin >> i)
{
nums.push_back(i);
if (cin.get() == '\n')break;
}
cout << sol.change(amount, nums)<<endl;
return 0;
}