01 背包
class Solution {
public:
bool canPartition(vector<int>& nums) {
int N = nums.size();
int sum = 0;
for(int i=0;i<N;i++) sum+=nums[i];
if(sum&1) return false;
// 01背包-容量sum/2
sum /= 2;
int dp[sum+1];
memset(dp,0,sizeof(dp));
for(int i=0;i<N;i++){
for(int j=sum;j>=nums[i];j--){
dp[j] = max(dp[j],dp[j-nums[i]] + nums[i]);
}
}
return dp[sum] == sum;
}
};