硬币面值组合问题
具体解题分析可见这篇博客硬币面值组合问题
#include <iostream>
#include <vector>
using namespace std;
int coinConbintions(vector<int> &coins, int sum)
{
int kind = coins.size();
vector<vector<int> > dp(kind + 1, vector<int>(sum + 1, 0));
for(int i = 0; i <= kind; i++)
{
dp[i][0] = 1;
}
for(int i = 1; i <= kind; i++)
{
for(int j = 1; j <= sum; j++)
{
for(int k= 0; k <= j / coins[i-1]; k++)
{
dp[i][j] += dp[i-1][j - k * coins[i-1]];
}
}
}
return dp[kind][sum];
}
int main()
{
vector<int> coins{1, 2, 5, 10, 20, 50, 100, 200};
int sum = 200;
cout << coinConbintions(coins, sum);
return 0;
}