|
| 1 | +// Partition a set into two subsets such that the difference of subset sums is minimum |
| 2 | + |
| 3 | +/* |
| 4 | +Input: arr[] = {1, 6, 11, 5} |
| 5 | +Output: 1 |
| 6 | +Explanation: |
| 7 | +Subset1 = {1, 5, 6}, sum of Subset1 = 12 |
| 8 | +Subset2 = {11}, sum of Subset2 = 11 |
| 9 | +
|
| 10 | +Input: arr[] = {36, 7, 46, 40} |
| 11 | +Output: 23 |
| 12 | +Explanation: |
| 13 | +Subset1 = {7, 46} ; sum of Subset1 = 53 |
| 14 | +Subset2 = {36, 40} ; sum of Subset2 = 76 |
| 15 | + */ |
| 16 | + |
| 17 | +import java.util.*; |
| 18 | +import java.lang.*; |
| 19 | +import java.io.*; |
| 20 | +class GFG |
| 21 | + { |
| 22 | + public static void main (String[] args) |
| 23 | + { |
| 24 | + Scanner sc=new Scanner(System.in); |
| 25 | + int t=sc.nextInt(); |
| 26 | + while(t-->0) |
| 27 | + { |
| 28 | + int n=sc.nextInt(); |
| 29 | + int arr[]=new int[n]; |
| 30 | + int sum=0; |
| 31 | + for(int i=0;i<n;i++) |
| 32 | + { |
| 33 | + arr[i]=sc.nextInt(); |
| 34 | + sum+=arr[i]; |
| 35 | + } |
| 36 | + int ans[]=new int[sum]; |
| 37 | + ans=subset(arr,sum); |
| 38 | + int min=Integer.MAX_VALUE; |
| 39 | + for(int i=0;i<ans.length;i++) |
| 40 | + min=Math.min(min,(sum-2*ans[i])); |
| 41 | + System.out.println(min); |
| 42 | + } |
| 43 | + } |
| 44 | + static int[] subset(int arr[],int sum) |
| 45 | + { |
| 46 | + int n=arr.length; |
| 47 | + boolean dp[][]=new boolean[n+1][sum+1]; |
| 48 | + for(int i=0;i<=n;i++) |
| 49 | + dp[i][0]=true; |
| 50 | + for(int i=1;i<=sum;i++) |
| 51 | + dp[0][i]=false; |
| 52 | + // subset sum concept |
| 53 | + for(int i=1;i<=n;i++) |
| 54 | + { |
| 55 | + for(int j=1;j<=sum;j++) |
| 56 | + { |
| 57 | + if(arr[i-1]<=j) |
| 58 | + dp[i][j]=dp[i-1][j-arr[i-1]] || dp[i-1][j]; |
| 59 | + else |
| 60 | + dp[i][j]=dp[i-1][j]; |
| 61 | + } |
| 62 | + } |
| 63 | + //storing last dp column whose value is true till sum/2 |
| 64 | + int index[]=new int[sum]; |
| 65 | + int p=0; |
| 66 | + for(int i=0;i<=sum/2;i++) |
| 67 | + { |
| 68 | + if(dp[n][i]==true) |
| 69 | + index[p++]=i; |
| 70 | + } |
| 71 | + return index; |
| 72 | + } |
| 73 | +} |
0 commit comments