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