题目
一看题目以为和戳气球一个套路,然后难哭了,思路之后补吧
具体代码
class Solution {
public int removeBoxes(int[] boxes) {
int dp[][][] = new int[100][100][100];
return calculate(boxes,dp,0,boxes.length-1,0);
}
public int calculate(int[] boxes,int[][][] dp,int left,int right,int k){
if(left > right) return 0;
if(dp[left][right][k] != 0) return dp[left][right][k];
while(left < right && boxes[right]==boxes[right-1]){
right--;
k++;
}
dp[left][right][k] = calculate(boxes,dp,left,right-1,0) + (k+1)*(k+1);
for(int i = left;i < right;i++){
if(boxes[i]==boxes[right]){
dp[left][right][k] = Math.max(dp[left][right][k],calculate(boxes,dp,left,i,k+1)+calculate(boxes,dp,i+1,right-1,0));
}
}
return dp[left][right][k];
}
}
来源官方题解