动态规划 永远滴神!!!
给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。

1 class Solution { 2 public: 3 int change(int amount, vector<int>& coins) { 4 vector<int>dp(amount+1);//设置dp[i] 表示 i为面额金币时的组合数 5 //现在求面额为amount 是的组合数 所以求dp[amount]值 6 //考虑边界条件 dp[0]=1; 7 //转移方程 dp[i]=dp[i]+dp[i-coins[i]];当coins[i]<amount时 8 dp[0]=1; 9 for(int i=0;i<coins.size();i++){ 10 for(int j=coins[i];j<=amount;j++){ 11 dp[j]=dp[j]+dp[j-coins[i]]; 12 } 13 } 14 return dp[amount]; 15 } 16 };
