01背包问题
class Solution {
public:
bool canPartition(vector<int>& nums) {
int n = nums.size();
if(n == 1) return false;
int sum = 0;
int maxSum = 0;
for(auto e:nums){
sum += e;
if(e > maxSum) maxSum = e;
}
if(sum%2 == 1) return false;
int target = sum/2;
if(maxSum > target) return false;
vector<int> dp(target+1,0);
for(int i = 0;i < n;i++){
for(int j = target;j>=nums[i];j--){
dp[j] = max(dp[j],dp[j-nums[i]]+nums[i]);
}
}
return dp[target] == target;
}
};