class Solution {
public:
    bool canPartition(vector<int>& nums) {
         int sum = (int) accumulate(nums.begin(), nums.end(),0);
        if(sum&1){
            return false;
        }else {
            sum = (int) sum/2;
            vector<bool> dp(sum+1);
            dp[0] = true;
            for(auto &&x : nums) {
                // if sumX is present that means sumX-(something) also present
                for(int i = sum; i >= x; i--){
                    dp[i] = dp[i] || dp[i-x] ;
                }
            }
            // debug() << imie(dp);
            return dp.back();
        }   
    }
};