题目链接:LeetCode546
分析:(不会 )看题解
思路:dp
照着题解敲的代码:
class Solution {
public int removeBoxes(int[] boxes) {
int n=boxes.length;
int[][][] dp=new int[n][n][n+1];
return caculate(boxes,dp,0,n-1,0);
}
int caculate(int[] boxes,int[][][] dp,int l,int r,int k){
if(l>r)return 0;
if(dp[l][r][k]!=0)return dp[l][r][k];
while(r>l&&boxes[r]==boxes[r-1]){
r--;
k++;
}
dp[l][r][k]=caculate(boxes,dp,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],caculate(boxes,dp,l,i,k+1)+caculate(boxes,dp,i+1,r-1,0));
}
}
return dp[l][r][k];
}
}