zl程序教程

您现在的位置是:首页 >  其他

当前栏目

0/1背包问题应用案例

案例应用 背包 问题
2023-09-11 14:21:06 时间

1.leetcode 494题

//转换为0/1背包问题,求解在bagsize为某值的时候,有多少种组合方式,dp[j]表示在容量为j的情况下,有多少种组合方式
def findTargetSumWays(self, nums: List[int], target: int) -> int:
        sumValue = sum(nums)
        if target > sumValue or (sumValue + target) % 2 == 1: 
            return 0
        bagSize = (sumValue + target) // 2
        dp = [0] * (bagSize + 1)
        dp[0] = 1
        //外层遍历,用来判断加上nums[i]后,满足内层各种容量j的情况有多少种,
        //每加遍历一个nums[j],dp[j]就更新一次,相当于随着物品的增加,不断更新来判断
        //遍历变nums后,dp[j]各容量的真实情况就全部更新完毕了
        for i in range(len(nums)):
            for j in range(bagSize, nums[i] - 1, -1):
                dp[j] += dp[j - nums[i]]
        return dp[bagSize]