-
Notifications
You must be signed in to change notification settings - Fork 985
/
Copy pathPartitionEqualSubsetSum.java
43 lines (38 loc) · 1.07 KB
/
PartitionEqualSubsetSum.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class PartitionEqualSubsetSum{
public static void main(String args[]){
int nums[]={1,3,5,2,6,3};
System.out.print(canPartition(nums));
}
public static boolean canPartition(int[] nums) {
int n=nums.length;
int sum=0;
for(int i=0;i<n;i++){
sum+=nums[i];
}
if(sum%2!=0){
return false;
}
int dp[][]=new int[nums.length+1][(sum/2)+1];
for(int i=0;i<dp.length;i++){
for(int j=0;j<dp[0].length;j++){
dp[i][j]=-1;
}
}
return subset(nums,sum/2,0,dp)==1;
}
static int subset(int arr[],int val,int ind,int dp[][]){
if(ind>=arr.length){
if(val==0) return 1 ;
return 0;
}
if(dp[ind][val]!=-1){
return dp[ind][val];
}
int taken=0;
if(arr[ind]<=val){
taken=subset(arr,val-arr[ind],ind+1,dp);
}
int nottaken=subset(arr,val,ind+1,dp);
return dp[ind][val]=(taken | nottaken);
}
}