动态规划 永远滴神!!!

给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。 

 

 

 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 };

 

 

posted @ 2021-06-10 10:00  AI_Mi  阅读(47)  评论(0)    收藏  举报