From e7193aab8a22460a2ae5507263235ca50d46234a Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 12:31:11 +0800 Subject: [PATCH 01/11] Update MinimumSumPartition.java fix code issue --- DynamicProgramming/MinimumSumPartition.java | 121 +++++++++++--------- 1 file changed, 69 insertions(+), 52 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 18668e73e..bcc68338d 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -20,56 +20,73 @@ import java.lang.*; import java.io.*; public class MinimumSumPartition { - public static void main (String[] args) - { - Scanner sc = new Scanner(System.in); - int t = sc.nextInt(); - while(t-->0) - { - int n = sc.nextInt(); - int arr[] = new int[n]; - int sum = 0; - for(int i = 0;i < n;i++) - { - arr[i] = sc.nextInt(); - sum += arr[i]; - } - int ans[] = new int[sum]; - ans = subset(arr,sum); - int min = Integer.MAX_VALUE; - for (int i = 0; i < ans.length; i++) - min = Math.min(min,(sum-2*ans[i])); - System.out.println(min); - } - sc.close(); - } - static int[] subset(int arr[],int sum) - { - int n = arr.length; - boolean dp[][] = new boolean[n+1][sum+1]; - for(int i = 0; i <= n; i++) - dp[i][0] = true; - for(int i = 1; i <= sum; i++) - dp[0][i] = false; - // subset sum concept - for(int i = 1; i <= n; i++) - { - for(int j = 1; j <= sum; j++) - { - if(arr[i-1] <= j) - dp[i][j] = dp[i-1][j-arr[i-1]] || dp[i-1][j]; - else - dp[i][j] = dp[i-1][j]; - } - } - //storing last dp column whose value is true till sum/2 - int index[] = new int[sum]; - int p = 0; - for(int i = 0 ; i <= sum / 2; i++) - { - if(dp[n][i] == true) - index[p++] = i; - } - return index; - } + public static int subSet(int arr[]){ + int n = arr.length; + int sum = getSum(arr); + boolean dp[][] = new boolean[n+1][sum+1]; + for(int i = 0; i < n; i++){ + dp[i][0] = true; + } + for(int j = 0; j < sum; j++){ + dp[0][j] = false; + } + + //fill dp array + for(int i = 1; i <= n; i++){ + for(int j = 1; j <= sum; j++){ + if(arr[i-1] < j){ + dp[i][j] = dp[i-1][j - arr[i-1]] || dp[i-1][j]; + } + else if(arr[i-1] == j){ + dp[i][j] = true; + } + else{ + dp[i][j] = dp[i-1][j]; + } + } + } + + // fill the index array + int index[] = new int[sum]; + int p = 0; + for(int i = 0; i <= sum / 2; i++){ + if(dp[n][i]){ + index[p++] = i; + } + } + + return getMin(index, sum); + } + + public static int getSum(int arr[]){ + if(arr.length <= 0){ + return 0; + } + int sum = 0; + for(int i = 0; i < arr.length; i++){ + sum += arr[i]; + } + return sum; + } + + public static int getMin(int arr[], int sum){ + if(arr.length <= 0){ + return 0; + } + int min = Integer.MAX_VALUE; + for(int i = 0; i < arr.length; i++){ + min = Math.min(min, (sum - 2*arr[i])); + } + return min; + } + + public static void main(String args[]){ + Scanner in = new Scanner(System.in); + int n = in.nextInt(); + int arr[] = new int[n]; + for(int i = 0 ; i Date: Sun, 6 Sep 2020 16:52:32 +0800 Subject: [PATCH 02/11] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index bcc68338d..01816d8a4 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -69,13 +69,13 @@ public class MinimumSumPartition return sum; } - public static int getMin(int arr[], int sum){ - if(arr.length <= 0){ + public static int getMin(int[] arr, int sum) { + if (arr.length == 0) { return 0; } int min = Integer.MAX_VALUE; - for(int i = 0; i < arr.length; i++){ - min = Math.min(min, (sum - 2*arr[i])); + for (int temp : arr) { + min = Math.min(min, sum - 2 * temp); } return min; } From 880240c9081defbc52e7ae258731961baa349830 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:52:41 +0800 Subject: [PATCH 03/11] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 01816d8a4..4796e7648 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -20,7 +20,7 @@ import java.lang.*; import java.io.*; public class MinimumSumPartition { - public static int subSet(int arr[]){ + public static int subSet(int[] arr) { int n = arr.length; int sum = getSum(arr); boolean dp[][] = new boolean[n+1][sum+1]; From 9672ffccfe673494f9384922852b8a1a0bcd3c38 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:52:50 +0800 Subject: [PATCH 04/11] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 4796e7648..d9a2b3446 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -23,7 +23,7 @@ public class MinimumSumPartition public static int subSet(int[] arr) { int n = arr.length; int sum = getSum(arr); - boolean dp[][] = new boolean[n+1][sum+1]; + boolean[][] dp = new boolean[n + 1][sum + 1]; for(int i = 0; i < n; i++){ dp[i][0] = true; } From e27175bc10e6f39a076206f118d7dac58173b768 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:53:08 +0800 Subject: [PATCH 05/11] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index d9a2b3446..50250adce 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -58,13 +58,16 @@ public class MinimumSumPartition return getMin(index, sum); } - public static int getSum(int arr[]){ - if(arr.length <= 0){ - return 0; - } + /** + * Calculate sum of array elements + * + * @param arr the array + * @return sum of given array + */ + public static int getSum(int[] arr) { int sum = 0; - for(int i = 0; i < arr.length; i++){ - sum += arr[i]; + for (int temp : arr) { + sum += temp; } return sum; } From 6fdd9c90dab26725a36af96eff28d226295c043d Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:53:17 +0800 Subject: [PATCH 06/11] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 50250adce..6220315ee 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -24,7 +24,7 @@ public class MinimumSumPartition int n = arr.length; int sum = getSum(arr); boolean[][] dp = new boolean[n + 1][sum + 1]; - for(int i = 0; i < n; i++){ + for (int i = 0; i <= n; i++) { dp[i][0] = true; } for(int j = 0; j < sum; j++){ From e8a4628c96dd313483ddd8cd083b8b2d2dd144f4 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:53:25 +0800 Subject: [PATCH 07/11] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 6220315ee..20aeef84e 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -27,7 +27,7 @@ public class MinimumSumPartition for (int i = 0; i <= n; i++) { dp[i][0] = true; } - for(int j = 0; j < sum; j++){ + for (int j = 0; j <= sum; j++) { dp[0][j] = false; } From ad3bb8187cf456c67cef87ce2fd8058b83592e41 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:53:33 +0800 Subject: [PATCH 08/11] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 20aeef84e..58fe1edf8 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -49,8 +49,8 @@ public class MinimumSumPartition // fill the index array int index[] = new int[sum]; int p = 0; - for(int i = 0; i <= sum / 2; i++){ - if(dp[n][i]){ + for (int i = 0; i <= sum / 2; i++) { + if (dp[n][i]) { index[p++] = i; } } From 695123086281f1b45dbb0689e7b86d3093a39e11 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:53:45 +0800 Subject: [PATCH 09/11] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 58fe1edf8..2108ecfb7 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -47,7 +47,7 @@ public class MinimumSumPartition } // fill the index array - int index[] = new int[sum]; + int[] index = new int[sum]; int p = 0; for (int i = 0; i <= sum / 2; i++) { if (dp[n][i]) { From 86d6e932ab99699d2adc87908eaf264489749a14 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:53:52 +0800 Subject: [PATCH 10/11] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 2108ecfb7..c40d8090f 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -32,16 +32,14 @@ public class MinimumSumPartition } //fill dp array - for(int i = 1; i <= n; i++){ - for(int j = 1; j <= sum; j++){ - if(arr[i-1] < j){ - dp[i][j] = dp[i-1][j - arr[i-1]] || dp[i-1][j]; - } - else if(arr[i-1] == j){ + for (int i = 1; i <= n; i++) { + for (int j = 1; j <= sum; j++) { + if (arr[i - 1] < j) { + dp[i][j] = dp[i - 1][j - arr[i - 1]] || dp[i - 1][j]; + } else if (arr[i - 1] == j) { dp[i][j] = true; - } - else{ - dp[i][j] = dp[i-1][j]; + } else { + dp[i][j] = dp[i - 1][j]; } } } From 3e727e3ff51e6586f86fb312c6d032a0f1a5daee Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:54:10 +0800 Subject: [PATCH 11/11] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index c40d8090f..e0fb5296f 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -81,13 +81,12 @@ public class MinimumSumPartition return min; } - public static void main(String args[]){ - Scanner in = new Scanner(System.in); - int n = in.nextInt(); - int arr[] = new int[n]; - for(int i = 0 ; i