Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution{
- public:
- int perfectSum(int arr[], int n, int sum)
- {
- // Your code goes here
- sort(arr, arr+n);
- int i=0;
- while(i<n && arr[i]==0) i++;
- int*mew= new int[(sum+1)*(n+1)]();
- fill_n(mew, (sum+1)*(n+1), -1);
- return pow(2,i)*recurse(arr, n, sum, mew, n);
- }
- int recurse(int arr[], int n, int sum,int* mew, int N){
- if(mew[sum*N +n]!=-1)return mew[sum*N +n];
- if(sum==0)return 1;
- if(n<=0 || arr[n-1]==0) return 0;
- if(arr[n-1]<=sum) {
- int a = recurse(arr,n-1,sum-arr[n-1], mew, N);
- int b = recurse(arr,n-1,sum, mew, N);
- mew[sum*N +n]= a + b;
- return a+b;
- }
- mew[sum*N +n]= recurse(arr,n-1,sum, mew, N);
- return mew[sum*N +n];
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement