416. 分割等和子集
一:dp
dp[i][j] = dp[i-1][j] or dp[i-1][j-nums[i-1]]
不用i-1 用i-1dp[0][j] = False #0个数什么也凑不出
dp[i][0] = True #0一定能凑出class Solution:
def canPartition(self, nums) -> bool:
n =len(nums)
s = sum(nums)
if s%2 !=0: return False #和为奇数说明无法等分
s = s//2
dp = [[False]* (s+1) for _ in range(n+1)]
for i in range(n+1): #重点:base case
dp[i][0] = True
for i in range(1, n+1):
for j in range(1,s+1):
if j-nums[i-1] >= 0:
dp[i][j] = dp[i-1][j] or dp[i-1][j-nums[i-1]]
else:
dp[i][j] = dp[i-1][j]
return dp[n][s]最后更新于