同步操作将从 编程语言算法集/Java 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package DynamicProgramming;// Partition a set into two subsets such that the difference of subset sums is minimum/*Input: arr[] = {1, 6, 11, 5}Output: 1Explanation:Subset1 = {1, 5, 6}, sum of Subset1 = 12Subset2 = {11}, sum of Subset2 = 11Input: arr[] = {36, 7, 46, 40}Output: 23Explanation:Subset1 = {7, 46} ; sum of Subset1 = 53Subset2 = {36, 40} ; sum of Subset2 = 76*/import java.io.*;import java.util.*;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];for (int i = 0; i <= n; i++) {dp[i][0] = true;}for (int j = 0; j <= sum; j++) {dp[0][j] = false;}// fill dp arrayfor (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 arrayint[] 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);}/*** 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 temp : arr) {sum += temp;}return sum;}public static int getMin(int[] arr, int sum) {if (arr.length == 0) {return 0;}int min = Integer.MAX_VALUE;for (int temp : arr) {min = Math.min(min, sum - 2 * temp);}return min;}/** Driver Code */public static void main(String[] args) {assert subSet(new int[] {1, 6, 11, 5}) == 1;assert subSet(new int[] {36, 7, 46, 40}) == 23;assert subSet(new int[] {1, 2, 3, 9}) == 3;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。