Advertisement
knakul853

Untitled

Jul 25th, 2020
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.76 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     bool canPartition(vector<int>& nums) {
  4.        
  5.         int sm = accumulate(nums.begin(), nums.end(),0);
  6.         if(sm&1)return 0;
  7.         sm/=2;
  8.         int n = nums.size();
  9.        
  10.         vector<vector<int>>dp(n+1, vector<int>(sm+1, -1));
  11.        
  12.         return f(nums, 0, sm, dp);
  13.        
  14.     }
  15.    
  16.     bool f(vector<int>&nums, int id, int target, vector<vector<int>>&dp)
  17.     {
  18.         if(target == 0)
  19.             return true;
  20.         if(target<0 || id == nums.size())
  21.         {
  22.             return false;
  23.         }
  24.        
  25.         if(dp[id][target]!=-1)return dp[id][target];
  26.        
  27.         bool res = f(nums, id+1, target, dp) | f(nums, id+1, target - nums[id], dp);
  28.      return dp[id][target] = res;
  29.     }
  30. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement