modify code

pull/6/head
algorithmzuo 5 years ago
parent 3554ba59cf
commit 752eae9af2

@ -65,24 +65,26 @@ public class Code02_ThrowChessPiecesProblem {
for (int i = 1; i != dp.length; i++) { for (int i = 1; i != dp.length; i++) {
dp[i][1] = i; dp[i][1] = i;
} }
int[] cands = new int[kChess + 1]; int[][] best = new int[nLevel + 1][kChess + 1];
for (int i = 1; i != dp[0].length; i++) { for (int i = 1; i != dp[0].length; i++) {
dp[1][i] = 1; dp[1][i] = 1;
cands[i] = 1; best[1][i] = 1;
} }
for (int i = 2; i < nLevel + 1; i++) { for (int i = 2; i < nLevel + 1; i++) {
for (int j = kChess; j > 1; j--) { for (int j = kChess; j > 1; j--) {
int min = Integer.MAX_VALUE; int ans = Integer.MAX_VALUE;
int minEnum = cands[j]; int bestChoose = -1;
int maxEnum = j == kChess ? i / 2 + 1 : cands[j + 1]; int down = best[i - 1][j];
for (int k = minEnum; k < maxEnum + 1; k++) { int up = j == kChess ? i : best[i][j + 1];
int cur = Math.max(dp[k - 1][j - 1], dp[i - k][j]); for (int first = down; first <= up; first++) {
if (cur <= min) { int cur = Math.max(dp[first - 1][j - 1], dp[i - first][j]);
min = cur; if (cur <= ans) {
cands[j] = k; ans = cur;
} bestChoose = first;
} }
dp[i][j] = min + 1; }
dp[i][j] = ans + 1;
best[i][j] = bestChoose;
} }
} }
return dp[nLevel][kChess]; return dp[nLevel][kChess];

Loading…
Cancel
Save