From 85abdaa11f3269a73ce181a1f600cc5ab26b35d8 Mon Sep 17 00:00:00 2001 From: algorithmzuo Date: Thu, 1 Apr 2021 19:25:40 +0800 Subject: [PATCH] modify code --- src/class46/Code01_BurstBalloons.java | 18 +++++------------- src/class46/Code02_RemoveBoxes.java | 5 ++--- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/class46/Code01_BurstBalloons.java b/src/class46/Code01_BurstBalloons.java index 5387326..cfaf361 100644 --- a/src/class46/Code01_BurstBalloons.java +++ b/src/class46/Code01_BurstBalloons.java @@ -56,23 +56,15 @@ public class Code01_BurstBalloons { } for (int L = N; L >= 1; L--) { for (int R = L + 1; R <= N; R++) { - int finalL = help[L - 1] * help[L] * help[R + 1] + dp[L + 1][R]; - int finalR = help[L - 1] * help[R] * help[R + 1] + dp[L][R - 1]; - int max = Math.max(finalL, finalR); - for (int leftEnd = L + 1; leftEnd < R; leftEnd++) { - max = Math.max(max, - help[L - 1] * help[leftEnd] * help[R + 1] + dp[L][leftEnd - 1] + dp[leftEnd + 1][R]); + int ans = help[L - 1] * help[L] * help[R + 1] + dp[L + 1][R]; + ans = Math.max(ans, help[L - 1] * help[R] * help[R + 1] + dp[L][R - 1]); + for (int i = L + 1; i < R; i++) { + ans = Math.max(ans, help[L - 1] * help[i] * help[R + 1] + dp[L][i - 1] + dp[i + 1][R]); } - dp[L][R] = max; + dp[L][R] = ans; } } return dp[1][N]; } - public static void main(String[] args) { - int[] arr = { 4, 2, 3, 5, 1, 6 }; - System.out.println(maxCoins1(arr)); - System.out.println(maxCoins2(arr)); - } - } diff --git a/src/class46/Code02_RemoveBoxes.java b/src/class46/Code02_RemoveBoxes.java index 489cff0..75f5a84 100644 --- a/src/class46/Code02_RemoveBoxes.java +++ b/src/class46/Code02_RemoveBoxes.java @@ -36,18 +36,17 @@ public class Code02_RemoveBoxes { public static int process2(int[] boxes, int L, int R, int K, int[][][] dp) { if (L > R) { - return K * K; + return 0; } if (dp[L][R][K] > 0) { return dp[L][R][K]; } - int ans = 0; int last = L; while (last + 1 <= R && boxes[last + 1] == boxes[L]) { last++; } int pre = K + last - L; - ans = (pre + 1) * (pre + 1) + process2(boxes, last + 1, R, 0, dp); + int ans = (pre + 1) * (pre + 1) + process2(boxes, last + 1, R, 0, dp); for (int i = last + 2; i <= R; i++) { if (boxes[i] == boxes[L] && boxes[i - 1] != boxes[L]) { ans = Math.max(ans, process2(boxes, last + 1, i - 1, 0, dp) + process2(boxes, i, R, pre + 1, dp));