题目
思路
本题和纯完全背包不一样,纯完全背包是凑成背包最大价值是多少,而本题是要求凑成总金额的物品组合个数!
外层for循环遍历物品(钱币),内层for遍历背包(金钱总额),则dp[j]计算的是组合数
外层for循环遍历背包(金钱总额),内层for遍历物品(钱币),则dp[j]计算的是排列数
代码
class Solution:
def change(self, amount: int, coins: List[int]) -> int:
dp = [0]*(amount + 1)
dp[0] = 1
# 遍历物品
for i in range(len(coins)):
# 遍历背包
for j in range(coins[i], amount + 1):
dp[j] += dp[j - coins[i]]
return dp[amount]