題目描述:
思路1:動態規劃
class Solution {
public:
bool canPartition(vector<int>& nums) {
int sum=accumulate(nums.begin(),nums.end(),0);
if(sum&1)//奇數
return false;
int n=nums.size();
int target=sum>>1;
vector<vector<bool>> dp(n,vector<bool>(target+1));
if(nums[0]<=target){
dp[0][nums[0]]=true;
}
for(int i=1;i<n;i++){
for(int j=0;j<=target;j++){
dp[i][j]=dp[i-1][j];
if(nums[i]==j){
dp[i][j]=true;
continue;
}
if(nums[i]<j){
dp[i][j]=dp[i-1][j]||dp[i-1][j-nums[i]];
}
}
}
return dp[n-1][target];
}
};
class Solution {
public:
bool canPartition(vector<int>& nums) {
int sum=accumulate(nums.begin(),nums.end(),0);//accumulate(start,end,init)
if(sum&1==1)
return false;
vector<int> dp(sum+1);
dp[0]=1;
for(int num:nums){
for(int i=sum>>1;i>=0;i--){
if(dp[i])
dp[i+num]=1;
}
if(dp[sum>>1])
return true;
}
return false;
}
};