训练营day42|动态规划|416. 分割等和子集
416. 分割等和子集
要点
- 转化为背包问题,
- 背包容量为sum/2;物品为元素i,物品重量为元素i,物品价值为元素i,背包总价值等于背包容量时,返回true
- 转化为背包问题后,基本是01背包问题的模板。
代码
class Solution:
def canPartition(self, nums: List[int]) -> bool:
sum_ = sum(nums)
if sum_ % 2 != 0:
return False
target = sum_ // 2
dp = [0] * (target + 1)
for i in range(0, len(nums)):
for j in range(target, nums[i] - 1, -1):
dp[j] = max(dp[j], dp[j - nums[i]] + nums[i])
if dp[target] == target:
return True
return False