完全背包问题:
1.遍历顺序改为正序遍历
2.先物品再背包---组合问题,先背包在物品---排列问题
组合问题,先物品再背包。物品在外层,背包在内层
要保证j-coin>=0,可以手动控制背包的遍历范围
dp = [0] * (amount+1)
dp[0] = 1
for coin in coins:
for j in range(coin,amount+1):
dp[j] += dp[j-coin]
return dp[amount]
组合问题,先背包在物品。背包在外层,物品在内层。
背包在外,不能直接控制,物品没办法手动控制
增加if 判断条件
class Solution(object):
def combinationSum4(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
dp = [0] * (target+1)
dp[0] = 1
for i in range(target+1):
for num in nums:
if num <= i:
dp[i] += dp[i-num]
return dp[target]