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