LeetCode 518 零钱兑换 II

  • 分析
    这道题是一个完全背包的题目,dp[i][j]的定义如下:若只使用前i个物品,当背包容量为j时,有dp[i][j]种方法可以装满背包。
  • 代码
class Solution {
    
    
public:
    int change(int amount, vector<int>& coins) {
    
    
        int m = coins.size();
        vector<vector<int>> dp(m + 1, vector(amount + 1, 0));        
        for(int i = 0; i <= m; i++) dp[i][0] = 1;

        for(int i = 1; i <= m; i++){
    
    
            for(int j = 1; j <= amount; j++){
    
    
                if(j - coins[i - 1] >= 0){
    
    
                    dp[i][j] = dp[i - 1][j] + dp[i][j - coins[i - 1]];
                }else{
    
    
                    dp[i][j] = dp[i - 1][j];
                }
            }
        }
        return dp[m][amount];
    }
};

猜你喜欢

转载自blog.csdn.net/xiaoan08133192/article/details/117157267
今日推荐