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