leetcode-Remove Boxes

来源:互联网 发布:淘宝护肤品禁用词 编辑:程序博客网 时间:2024/05/24 00:46
      /*
* 采用记忆搜索
* dp[left][right][k]:boxes编号从left到right,且左边有k个boxe跟boxes[left]相同
* 思路:左边的k个可以先跟boxes[left]移除,也可以保留下来跟右边的bxoes[left]相同的移除
* dp[left][right][k]=Max{(k+1)^2+dp[left+1][right][0],max(dp[left+1][m-1][0]+dp[m][right][k+1])};
* m为left+1~right与boxes[left]相同的编号
*/

        public static int removeBoxes(int[] boxes) {
           int[][][] dp=new int[boxes.length][boxes.length][boxes.length];
            return dpf(boxes,0,boxes.length-1,0,dp);
        }

public static int dpf(int[] boxes,int left,int right,int k,int[][][] dp){

if(left>right)return 0;

if(dp[left][right][k]>0)return dp[left][right][k];

int res=(k+1)*(k+1)+dpf(boxes,left+1,right,0,dp);

for(int m=left+1;m<=right;m++)
if(boxes[left]==boxes[m])
res=Math.max(res,dpf(boxes,left+1,m-1,0,dp)+dpf(boxes,m,right,k+1,dp));

dp[left][right][k]=res;

return res;
}
原创粉丝点击