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