#define debug(x) cout<<#x<<": "<<x<<endl;
class Solution {
public:
bool canPartition(vector<int>& a) {
int s = 0;
for(auto i:a){
s += i;
}
if( s & 1 ){
return false;
}
s /= 2;
int n = a.size();
auto dp = vector<int> ( s+1,0 );
dp[0] = 1;
for(int i=0;i<n;++i){
for(int v=s;v>=0;--v){
if( v-a[i]>=0 ){
if(dp[ v - a[i] ] == 1){
dp[v] = 1;
}
}
}
}
// debug(s)
// for(int i=0;i<dp.size();++i){
// cout<<dp[i]<<" ";
// }
return dp[s];
}
};