leetcode546.移除盒子(java)

题目
在这里插入图片描述
一看题目以为和戳气球一个套路,然后难哭了,思路之后补吧

具体代码

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];
    }
}

来源官方题解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值