Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- int dp[21][1001];
- int fun(int i,int n,int target,vector<int>&a)
- {
- //if(csum == target) return 1;
- if(target == 0)
- {
- return 1;
- }
- if(target < 0) return 0;
- if(i == n-1)
- {
- if(target - a[i] == 0) return 1; return 0;
- }
- if(dp[i][target]!=-1) return dp[i][target];
- int op1 = a[i] > 0? fun(i+1,n,target-a[i],a):0;
- int op2 = fun(i+1,n,target,a);
- return dp[i][target] = op1 + op2;
- }
- public:
- int findTargetSumWays(vector<int>& a, int target) {
- int n = a.size();
- memset(dp,-1,sizeof dp);
- int sum = 0 , c = 0;
- for(int x:a) {sum += x; if(x == 0) c++;}
- if( (target + sum) & 1) return 0;
- if(target > sum) return 0;
- return fun(0,n,(target+sum)>>1,a) * (1<<c);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement