Golang | Leetcode Golang题解之第546题移除盒子

题目:

题解:

Go 复制代码
func removeBoxes(boxes []int) int {
    dp := [100][100][100]int{}
    var calculatePoints func(boxes []int, l, r, k int) int
    calculatePoints = func(boxes []int, l, r, k int) int {
        if l > r {
            return 0
        }
        if dp[l][r][k] == 0 {
            r1, k1 := r, k
            for r1 > l && boxes[r1] == boxes[r1 - 1] {
                r1--
                k1++
            }
            dp[l][r][k] = calculatePoints(boxes, l, r1 - 1, 0) + (k1 + 1) * (k1 + 1)
            for i := l; i < r1; i++ {
                if boxes[i] == boxes[r1] {
                    dp[l][r][k] = max(dp[l][r][k], calculatePoints(boxes, l, i, k1 + 1) + calculatePoints(boxes, i + 1, r1 - 1, 0))
                }
            }
        }
        return dp[l][r][k]
    }
    return calculatePoints(boxes, 0, len(boxes) - 1, 0)
}

func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}
相关推荐
老鼠只爱大米2 分钟前
LeetCode经典算法面试题 #19:删除链表的倒数第N个结点(双指针、栈辅助法等多种实现方案详细解析)
算法·leetcode·链表·双指针·删除链表节点·一趟扫描
漫随流水17 分钟前
leetcode回溯算法(131.分割回文串)
数据结构·算法·leetcode·回溯算法
王老师青少年编程30 分钟前
2023年12月GESP真题及题解(C++七级): 商品交易
c++·题解·真题·gesp·csp·七级·商品交易
夏鹏今天学习了吗10 小时前
【LeetCode热题100(92/100)】多数元素
算法·leetcode·职场和发展
源代码•宸11 小时前
Leetcode—509. 斐波那契数【简单】
经验分享·算法·leetcode·面试·golang·记忆化搜索·动规
踩坑记录13 小时前
leetcode hot100 206.反转链表 easy
leetcode
我不是8神15 小时前
字节跳动 Eino 框架(Golang+AI)知识点全面总结
开发语言·人工智能·golang
zhuhezhang15 小时前
go wails doctor提示Required dependencies missing: libwebkit
golang·wails·libwebkit
夏鹏今天学习了吗16 小时前
【LeetCode热题100(90/100)】编辑距离
算法·leetcode·职场和发展
一分之二~17 小时前
二叉树--层序遍历(迭代和递归)
数据结构·c++·算法·leetcode