From ec1a4151750633944a0ad5e3f64722375e6449dd Mon Sep 17 00:00:00 2001 From: PointSeven Date: Tue, 14 Jun 2016 17:41:50 +0800 Subject: [PATCH 1/8] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IntDivision/JAVA/IntDivision.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IntDivision/JAVA/IntDivision.java b/IntDivision/JAVA/IntDivision.java index 1d4a06d..ce1dc82 100644 --- a/IntDivision/JAVA/IntDivision.java +++ b/IntDivision/JAVA/IntDivision.java @@ -21,7 +21,7 @@ public static void main (String[] args) { public static int fun(int n, int m) { if (n < 1 || m < 1) { return 0; - } else if (n == 1 || m == 1) { + } else if (n == 1 && m == 1) { return 1; } else if (n < m) { return fun(n, n); From 80189b5488cb967baf3370a7c38fd2b2dfc853fb Mon Sep 17 00:00:00 2001 From: PointSeven Date: Sun, 19 Jun 2016 11:51:38 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E5=8F=88=E6=98=AFbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Perm/JAVA/Perm.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Perm/JAVA/Perm.java b/Perm/JAVA/Perm.java index e261ed4..83de5cf 100644 --- a/Perm/JAVA/Perm.java +++ b/Perm/JAVA/Perm.java @@ -12,7 +12,7 @@ public static void perm (Object[] list, int k, int m) { for (int i = 0; i <= m; i++) { System.out.print(list[i] + " "); } - System.out.println(); + //System.out.println(); } else { for (int i = k; i <= m; i++) { swap(list, k, i); From 072ec815c0a56c556805acda888d6eca44b84258 Mon Sep 17 00:00:00 2001 From: PointSeven Date: Sun, 19 Jun 2016 14:56:37 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E5=8A=A0=E5=85=A501=E8=83=8C=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZeroOnePack/JAVA/ZeroOnePack.java | 71 +++++++++++++++++++++++++++++++ ZeroOnePack/README | 1 + 2 files changed, 72 insertions(+) create mode 100644 ZeroOnePack/JAVA/ZeroOnePack.java create mode 100644 ZeroOnePack/README diff --git a/ZeroOnePack/JAVA/ZeroOnePack.java b/ZeroOnePack/JAVA/ZeroOnePack.java new file mode 100644 index 0000000..1eab4bb --- /dev/null +++ b/ZeroOnePack/JAVA/ZeroOnePack.java @@ -0,0 +1,71 @@ +/* + * Input:4 5 2 1 3 2 12 10 20 15 + * Output:1 1 0 1 + * + * 状态转移方程: + * + * m(i, j) = max{m(i + 1, j), m(i + 1, j - w[i]) + v[i]}, j >= w[i] + * m(i + 1, j), 0 <= j < w[i] + */ + +import java.util.Scanner; + +public class ZeroOnePack { + + public static void main (String[] args) { + Scanner sc = new Scanner(System.in); + + int n = sc.nextInt(); //物品个数 + int c = sc.nextInt(); //背包容量 + + int[] w = new int[n + 1]; //物品重量 + for (int i = 1; i <= n; i++) + w[i] = sc.nextInt(); + + int[] v = new int[n + 1]; //物品价值 + for (int i = 1; i <= n; i++) + v[i] = sc.nextInt(); + + int[][] m = new int[n + 1][c + 1]; //状态表 + knapsack(v, w, c, n, m); + int[] x = new int[n + 1]; //生成解 + traceback(m, w, c, n, x); + + for (int i = 1; i <= n; i++) + System.out.print(x[i] + " "); + } + + /* + * 构造状态表 + */ + public static void knapsack (int[] v, int[] w, int c, int n, int[][] m) { + //初始化 + int Max = Math.min(w[n] - 1, c); + for (int i = 0; i <= Max; i++) + m[n][i] = 0; + for (int i = w[n]; i <= c; i++) + m[n][i] = v[n]; + + for (int i = n - 1; i > 1; i--) { + Max = Math.min(w[i] - 1, c); + for (int j = 0; j <= Max; j++) + m[i][j] = m[i + 1][j]; + for (int j = w[i]; j <= c; j++) + m[i][j] = Math.max(m[i + 1][j], m[i + 1][j - w[i]] + v[i]); + } + } + + /* + * 构造最优解 + */ + public static void traceback (int[][] m, int[] w, int c, int n, int[] x) { + for (int i = 1; i < n; i++) + if (m[i][c] == m[i + 1][c]) + x[i] = 0; + else { + x[i] = 1; + c -= w[i]; + } + x[n] = (m[n][c] > 0) ? 1 : 0; + } +} diff --git a/ZeroOnePack/README b/ZeroOnePack/README new file mode 100644 index 0000000..12edf16 --- /dev/null +++ b/ZeroOnePack/README @@ -0,0 +1 @@ +0-1背包问题 From 2dfd16101b68227a5a29c3ff39d3e1a998a1c988 Mon Sep 17 00:00:00 2001 From: PointSeven Date: Sun, 19 Jun 2016 15:00:46 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=AC=AC=E4=B8=89?= =?UTF-8?q?=E6=AC=A1=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index ddb1459..d1389b1 100644 --- a/README.md +++ b/README.md @@ -11,3 +11,7 @@ - [合并排序](https://github.com/PointSeven/Algorithm/blob/master/MergeSort/JAVA/MergeSort.java) - [快速排序](https://github.com/PointSeven/Algorithm/blob/master/QuickSort/JAVA/QuickSort.java) - [Fibonacci数列](https://github.com/PointSeven/Algorithm/blob/master/Fibonacci/JAVA/Fibonacci.java) + +## 第三次测试 +- [矩阵连乘](https://github.com/PointSeven/Algorithm/blob/master/MatrixMultiply/JAVA/MatrixMultiply.java) +- [0-1背包](https://github.com/PointSeven/Algorithm/blob/master/ZeroOnePack/JAVA/ZeroOnePack.java) From 7c30c148b369286fb95dc859fd655f66079ec28b Mon Sep 17 00:00:00 2001 From: PointSeven Date: Sun, 19 Jun 2016 15:53:25 +0800 Subject: [PATCH 5/8] A little bug --- ZeroOnePack/JAVA/ZeroOnePack.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/ZeroOnePack/JAVA/ZeroOnePack.java b/ZeroOnePack/JAVA/ZeroOnePack.java index 1eab4bb..d00cad8 100644 --- a/ZeroOnePack/JAVA/ZeroOnePack.java +++ b/ZeroOnePack/JAVA/ZeroOnePack.java @@ -40,18 +40,18 @@ public static void main (String[] args) { */ public static void knapsack (int[] v, int[] w, int c, int n, int[][] m) { //初始化 - int Max = Math.min(w[n] - 1, c); - for (int i = 0; i <= Max; i++) + int iMax = Min(w[n] - 1, c); + for (int i = 0; i <= iMax; i++) m[n][i] = 0; for (int i = w[n]; i <= c; i++) m[n][i] = v[n]; for (int i = n - 1; i > 1; i--) { - Max = Math.min(w[i] - 1, c); - for (int j = 0; j <= Max; j++) + iMax = Min(w[i] - 1, c); + for (int j = 0; j <= iMax; j++) m[i][j] = m[i + 1][j]; for (int j = w[i]; j <= c; j++) - m[i][j] = Math.max(m[i + 1][j], m[i + 1][j - w[i]] + v[i]); + m[i][j] = Max(m[i + 1][j], m[i + 1][j - w[i]] + v[i]); } } @@ -68,4 +68,12 @@ public static void traceback (int[][] m, int[] w, int c, int n, int[] x) { } x[n] = (m[n][c] > 0) ? 1 : 0; } + + public static int Min (int a, int b) { + return a < b ? a : b; + } + + public static int Max (int a, int b) { + return a > b ? a : b; + } } From 45fb2154fa8a0924586e09b247f1170f09dbd343 Mon Sep 17 00:00:00 2001 From: PointSeven Date: Mon, 20 Jun 2016 00:05:33 +0800 Subject: [PATCH 6/8] Update MatrixMultiply.java --- MatrixMultiply/JAVA/MatrixMultiply.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MatrixMultiply/JAVA/MatrixMultiply.java b/MatrixMultiply/JAVA/MatrixMultiply.java index 4ebe8c4..fd74b7c 100644 --- a/MatrixMultiply/JAVA/MatrixMultiply.java +++ b/MatrixMultiply/JAVA/MatrixMultiply.java @@ -5,7 +5,7 @@ import java.util.Scanner; -class MatrixMultiply { +public class MatrixMultiply { static int[][] s = new int[100][100]; From 7f729f182d1ce31be29b8b63f2ff91ffbceba77c Mon Sep 17 00:00:00 2001 From: PointSeven Date: Tue, 21 Jun 2016 13:47:16 +0800 Subject: [PATCH 7/8] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MatrixMultiply/JAVA/MatrixMultiply.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MatrixMultiply/JAVA/MatrixMultiply.java b/MatrixMultiply/JAVA/MatrixMultiply.java index 4ebe8c4..cf83a47 100644 --- a/MatrixMultiply/JAVA/MatrixMultiply.java +++ b/MatrixMultiply/JAVA/MatrixMultiply.java @@ -45,7 +45,7 @@ public static int RMC (int i, int j, int[] p) { int u = RMC(i, i, p) + RMC(i + 1, j, p) + p[i - 1] * p[i] * p[j]; s[i][j] = i; for (int k = i + 1; k < j; k++) { - int t = RMC(i, k, p) + RMC(k + 1, j, p) + p[i - 1] * p[i] * p[j]; + int t = RMC(i, k, p) + RMC(k + 1, j, p) + p[i - 1] * p[k] * p[j]; if (t < u) { u = t; s[i][j] = k; From cebda18c123a3d675de64629fcfb5dfb53e999b8 Mon Sep 17 00:00:00 2001 From: PointSeven Date: Wed, 22 Jun 2016 19:24:05 +0800 Subject: [PATCH 8/8] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZeroOnePack/JAVA/ZeroOnePack.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ZeroOnePack/JAVA/ZeroOnePack.java b/ZeroOnePack/JAVA/ZeroOnePack.java index d00cad8..af3076a 100644 --- a/ZeroOnePack/JAVA/ZeroOnePack.java +++ b/ZeroOnePack/JAVA/ZeroOnePack.java @@ -53,6 +53,9 @@ public static void knapsack (int[] v, int[] w, int c, int n, int[][] m) { for (int j = w[i]; j <= c; j++) m[i][j] = Max(m[i + 1][j], m[i + 1][j - w[i]] + v[i]); } + m[1][c] = m[2][c]; + if (c >= w[1]) + m[1][c] = Max(m[1][c], m[2][c - w[1]] + v[1]); } /*