代码随想录day42

题目:分割等和子集

题解:

1)此题的物体重量和价值是相同的
2)在一维数组的背包问题中,因为是滚动数组。因此应该先遍历物品再遍历背包。并且背包的最大数量应该是从后往前的

代码:

class Solution(object):
    def canPartition(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        #dp[i]表示第0-(i-1)个数字组成的最大和为dp[i]
        target = sum(nums)
        if target % 2 == 1:
            return False
        target /= 2
        #dp = [0]*len(nums)
        dp = [0]*(target + 1)
        dp[0] = 0
        for i in range(1,len(nums)):
            j = target
            while j >= nums[i]:
                dp[j] = max(dp[j], dp[j- nums[i]] + nums[i] )
                j -= 1
        return target == dp[target]

你可能感兴趣的:(leetcode,算法,动态规划)