解法一:记忆化搜索
参考官方题解:https://leetcode-cn.com/problems/remove-boxes/solution/yi-chu-he-zi-by-leetcode-solution/
太顶了😱
class Solution {
public int removeBoxes(int[] boxes) {
final int n = boxes.length;
int[][][] dp = new int[n][n][n];
return f(dp, boxes, 0, boxes.length - 1, 0);
}
private int f(int[][][] dp, final int[] boxes, int l, int r, int k) {
if (l > r) {
return 0;
}
if (dp[l][r][k] != 0) {
return dp[l][r][k];
}
for (; (r > l) && (boxes[r] == boxes[r - 1]); --r, ++k) ;
dp[l][r][k] = f(dp, boxes, l, r - 1, 0) + (k + 1) * (k + 1);
for (int i = l; i < r; ++i) {
if (boxes[i] == boxes[r]) {
dp[l][r][k] = Math.max(dp[l][r][k], f(dp, boxes, l, i, k + 1) + f(dp, boxes, i + 1, r - 1, 0));
}
}
return dp[l][r][k];
}
}