class Solution {
public:
bool canPartition(vector<int>& nums) {
int sum=0;
for(int k:nums)
{
sum+=k;
}
if(sum%2!=0)
{
return false;
}
sum/=2;
int n=nums.size();
vector<vector<bool>>dp(n+1,vector<bool>(sum+1,false));//初始化dp数组
//base case
for(int i=0;i<=n;i++)
{
dp[i][0]=true;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=sum;j++)
{
if(j-nums[i-1]<0)
{
//背包容量不足,不能装入第i个物品
dp[i][j]=dp[i-1][j];
}
else
{
//装入或者不装入背包
dp[i][j]=dp[i-1][j]|dp[i-1][j-nums[i-1]];
}
}
}
return dp[n][sum];
}
};