leetcode 518 零钱兑换 II

113 阅读1分钟

leetcode 518 零钱兑换 II

动态规划

思路

  1. 上一个状态 dp[total - coins[i]](选择了硬币 coins[i] 时,有这么多种);
  2. 不选择 coins[i] 时,有 dp[total]种;
  3. 当前状态 dp[total] = dp[total] + dp[total - coins[i]];

题解

class Solution {
public:
    int change(int amount, vector<int>& coins) {
        vector<int> dp(amount + 1, 0);
        dp[0] = 1;
        for (int i = 0; i < coins.size(); i++) { // 遍历物品
            for (int total = coins[i]; total <= amount; total++) { // 遍历背包
                
                dp[total] += dp[total - coins[i]];
            }
        }
        return dp[amount];
    }
};

\