can[i]=1表示目前能凑成i,反之不能,01背包倒着来
class Solution
{
public:
bool can[20010];
bool canPartition(vector<int>& nums)
{
int sum=0;
for(int i=0;i<nums.size();i++) sum+=nums[i];
if(sum%2) return false;
memset(can,0,sizeof(can));
can[0]=1;
for(int i=0;i<nums.size();i++)
{
for(int j=sum/2;j>=1;j--)
{
if(j>=nums[i])
can[j]=can[j]|can[j-nums[i]];
}
}
return can[sum/2];
}
};