1
class Solution {
2
public int removeBoxes(int[] boxes) {
3
int n = boxes.length;
4
int[][][] dp = new int[n][n][n];
5
for (int i = n - 1; i >= 0; i--) {
6
for (int j = i; j < n; j++) {
7
for (int k = 0; k < n; k++) {
8
for (int m = i; m <= j; m++) {
9
if (boxes[m] == boxes[i]) {
10
dp[i][j][k] =
11
Math.max(
12
dp[i][j][k],
13
(m - 1 < i + 1 ? 0 : dp[i + 1][m - 1][0])
14
+ (k < n - 1 ? dp[m][j][k + 1] : 0));
15
}
16
}
17
dp[i][j][k] =
18
Math.max(dp[i][j][k], (i == n - 1 ? 0 : dp[i + 1][j][0]) + (k + 1) * (k + 1));
19
}
20
}
21
}
22
return dp[0][n - 1][0];
23
}
24
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0