关键字:完全背包、组合数问题

dp[0][0] 即价值0的物品放到容量为0的背包,应该也算一种方案 本题考查组合问题:问题求解为组合数,即dp[i][j] = dp[i-1][j] + dp[i][j - nums[i]] 个方案

alt

public:
    int change(int amount, vector<int>& coins) {
        int n = coins.size();
        vector<vector<int>> dp(n+1, vector<int>(amount+1,0));
        //1.边界初始化
        dp[0][0] = 1;
        //2 dp主过程
        for(int i=1;i<=n;i++) {
            for(int j=0;j<=amount;j++) {
                if(coins[i-1] <= j) {
                    dp[i][j] = dp[i-1][j] + dp[i][j - coins[i-1]];
                }else{
                    dp[i][j] = dp[i-1][j];
                }
            }
        }
        return dp[n][amount];
    }
};