leetcode 518 零钱兑换 II
动态规划
思路
- 上一个状态 dp[total - coins[i]](选择了硬币 coins[i] 时,有这么多种);
- 不选择 coins[i] 时,有 dp[total]种;
- 当前状态 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];
}
};
\