416. 分割等和子集
01背包问题的二维数组版弄懂了,一维数组的还是不清楚为什么要倒叙。
class Solution {
public:
bool canPartition(vector<int>& nums) {
if(nums.size() == 1){
return false;
}
bool result = false;
int dp_size = nums.size();
int sum = 0;
for(auto i:nums){
sum = sum + i;
}
if(sum%2 == 1){
return false;
}
int target = sum/2;
vector<int> dp(10001, 0);
for(int i=0; i<dp_size; i++){
for(int j=target; j >= nums[i]; j--){
dp[j] = max(dp[j],dp[j-nums[i]]+nums[i]);
if(dp[j] == target){
return true;
}
}
}
return false;
}
};