复习回顾-动态规划算法part6-377. 组合总和 Ⅳ

注意点&感悟:

  • 跟卡尔的57题不一样,57爬楼梯,物品是m,背包是total总台阶数量,每次爬楼梯的m个 for i in range(1,m+1) 选择是有限的
  • 377组合是,给的nums是物品,背包是target目标, 每次这些物品都能选,选择是全部遍历一遍。for i in range(len(nums)) 全部遍历

题目链接:377. 组合总和 Ⅳ

自己独立写的代码:

class Solution:
    def combinationSum4(self, nums: List[int], target: int) -> int:
        # 完全背包问题(可以选多次)
        # 属于完全背包问题下的求种类问题 
        # 需要先遍历背包,后遍历物品
        # 背包容量是target
        # 物品集和是nums(全部物品)
        # 递推公式为dp[j]+=dp[j-nums[i]]
        dp = [0] * (target+1)
        dp[0] = 1
        for j in range(target+1):
            for i in range(len(nums)):
                if j>= nums[i]:
                    dp[j] += dp[j-nums[i]]
        return dp[target]

通过截图:

posted @ 2024-02-29 10:47  o蹲蹲o  阅读(1)  评论(0编辑  收藏  举报