Equal Sum Set
https://www.lintcode.com/problem/partition-equal-subset-sum/description?_from=ladder&&fromId=135
这题可以用backpack类似的模板只是,最大value的值被boolean value取代。
我们通过DP来判定是否最后背包的value能变成sum//2
另外i或j为0的edge case在最开始需要初始化值。
class Solution:
"""
@param nums: a non-empty array only positive integers
@return: true if can partition or false
"""
def canPartition(self, nums):
# write your code here
s = sum(nums)
if s % 2 != 0:
return False
n = len(nums)
s = s//2
dp = [[False]*(s+1) for _ in range(n)]
for i in range(n):
dp[i][0] = True
for j in range(1,s+1):
dp[0][j] = nums[0] == j
for i in range(1,n):
for j in range(1,s+1):
if dp[i-1][j]:
dp[i][j] = dp[i-1][j]
else:
if j >= nums[i]:
dp[i][j] = dp[i-1][j- nums[i]]
return dp[n-1][s]
Last updated
Was this helpful?