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]