力扣
class Solution {
public:
bool canPartition(vector<int>& nums) {
// dp[i][j] = dp[i-1][j] dp[i-1][j-nums[i]] & 1
// memset(dp, 0, sizeof(dp));
int sum = 0;
for(int i = 0; i < nums.size(); i++)
sum += nums[i];
if(sum%2) return 0;
int dp[nums.size()][sum+1];
memset(dp[0], 0, sizeof(dp[0]));
int ret = 0;
dp[0][0] = 1;
for(int i = 0; i < nums.size(); i++) {
if(i == 0) dp[i][nums[i]] = 1;
else {
for(int j = 1; j <= sum; j++) {
dp[i][j] = 0;
// if(dp[i-1][j]) {
// // dp[i][j+nums[i]] = 1;
// dp[i][j] = 1;
// }
if( j - nums[i] >= 0)
dp[i][j] = dp[i-1][j] | dp[i-1][j-nums[i]];
else
dp[i][j] = dp[i-1][j];
if(j == sum/2 && dp[i][j])
return true;
}
}
}
return false;
}
};