算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 移除盒子,我们先来看题面:

https://leetcode-cn.com/problems/remove-boxes/

You are given several boxes with different colors represented by different positive numbers.

You may experience several rounds to remove boxes until there is no box left. Each time you can choose some continuous boxes with the same color (i.e., composed of k boxes, k >= 1), remove them and get k * k points.

Return the maximum points you can get.

给出一些不同颜色的盒子 boxes ,盒子的颜色由不同的正数表示。

你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。每一轮你可以移除具有相同颜色的连续 k 个盒子(k >= 1),这样一轮之后你将得到 k * k 个积分。

返回 你能获得的最大积分和 。

示例

示例 1:输入:boxes = [1,3,2,2,2,3,4,3,1]
输出:23
解释:
[1, 3, 2, 2, 2, 3, 4, 3, 1]
----> [1, 3, 3, 4, 3, 1] (3*3=9 分)
----> [1, 3, 3, 3, 1] (1*1=1 分)
----> [1, 1] (3*3=9 分)
----> [] (2*2=4 分)示例 2:输入:boxes = [1,1,1]
输出:9示例 3:输入:boxes = [1]
输出:1

解题

https://blog.csdn.net/weixin_44171872/article/details/106891504

方法1:动态规划

主要思路:

(1)三维动态数组dp[ i ][ j ][ k ]表示子元素组从 i到j 的右侧有 k 个连续的和boxes[ j ]相同的颜色;

(2)对于每一个dp[ i ][ j ],先从最右端找连续的相同的颜色,为k个,既dp[ i ][ j ][ k ],此时计算初值 dp[l][r][k]=dfs(boxes,l,r-1,0)+(k+1)*(k+1);既将最右侧的k+1个消去后,加上前面的可能的处理结果;

(3)然后从左端开始逐个找与右侧连续的箱子相同的颜色,既若boxes[i]==boxes[r],则相当于可以将原来的数组分成两组,既先将中间的从 i+1到r-1 的子数组作为一组先消去, 既 dfs(boxes,i+1,r-1,0),再将剩下的作为一个整体处理,既dfs(boxes,l,i,k+1),故此时dp[ i ][ j ][ k ]的值可以为dp[l][r][k]=dfs(boxes,l,i,k+1)+dfs(boxes,i+1,r-1,0);从l 到 l遍历重复 (3)中的过程,并和(2)中的结果结合,找出最大值;

class Solution {
public://题意中最大100int dp[101][101][101];int dfs(vector<int>&boxes,int l,int r,int k){//终止条件if(l>r)return 0;//先找出当前的最右边的连续相同的箱子while(r>l&&boxes[r]==boxes[r-1]){--r;++k;}//若之前计算过,直接返回if(dp[l][r][k]>0)return dp[l][r][k];//先计算(2)中的情况,既直接将最右边的相同的箱子消去dp[l][r][k]=dfs(boxes,l,r-1,0)+(k+1)*(k+1);//计算(3)中的情况,既在左边的数组中找出可以和右侧连续的箱子结合的情形for(int i=l;i<r;++i){if(boxes[i]==boxes[r]){dp[l][r][k]=max(dp[l][r][k],dfs(boxes,l,i,k+1)+dfs(boxes,i+1,r-1,0));}}//返回当前情形return dp[l][r][k];}int removeBoxes(vector<int>& boxes) {return dfs(boxes,0,boxes.size()-1,0);}
};

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-540题汇总,希望对你有点帮助!

LeetCode刷题实战541:反转字符串 II

LeetCode刷题实战542:01 矩阵

LeetCode刷题实战543:二叉树的直径

LeetCode刷题实战544:输出比赛匹配对

LeetCode刷题实战545:二叉树的边界

​LeetCode刷题实战546:移除盒子相关推荐

  1. ​LeetCode刷题实战488:祖玛游戏

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  2. ​LeetCode刷题实战216:组合总和 III

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  3. ​LeetCode刷题实战417:太平洋大西洋水流问题

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  4. ​LeetCode刷题实战517:超级洗衣机

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  5. ​LeetCode刷题实战391:完美矩形

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  6. ​LeetCode刷题实战603:连续空余座位

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  7. ​LeetCode刷题实战623:在二叉树中增加一行

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  8. ​LeetCode刷题实战371:两整数之和

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  9. ​LeetCode刷题实战375:猜数字大小 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

最新文章

  1. 重磅《美国机器智能国家战略》
  2. Android Studio -添加你见过的最牛Log*神器*
  3. 计算机网络玩家需要掌握的八个DOS命令
  4. C#简单操作MongoDB
  5. jquery.desktop.js 代码分析
  6. DCMTK:DcmFloatingPointDouble类的测试程序
  7. java中log4j的详解(转)
  8. Redis -基础命令
  9. 专家称 AI 可以在 120 年内接管人类的所有工作
  10. JS获取HTML video标签视频第一帧
  11. 20.Yii 工作流
  12. 实战Python:利用python在pycharm开发名片管理系统
  13. python游戏开发引擎_【图片】有关Ren'Py引擎的游戏制作汉化教程【linux游戏吧】_百度贴吧...
  14. 几个大学生7天涨粉百万,月入超过10万,5000字长文拆解
  15. Linux如何不格式化挂载硬盘,linux下格式化硬盘与挂载硬盘
  16. 【理想流】程序员的性格和命运
  17. 物联网传感器61个应用领域
  18. w ndows摄像头驱动怎么安,一步一步教你安装如何摄像头驱动(图)
  19. 一次离奇报错Whitelabel Error Page
  20. 数据库专题——笛卡尔积

热门文章

  1. springboot权限系统
  2. php、git、redis函数合集
  3. 最新postfix 的master.cf配置参考
  4. 「高效程序员的修炼」代码版本管理工具 Git 用起来 01 Git 基础
  5. 华为android机考题,华为无线题库_华为射频机考,华为无线射频题库
  6. AI面相测试源码 AI面相手相大师小程序源码 最新版微信小程序源码
  7. koa框架数据导出为excel格式
  8. python算法口诀_python 正则表达式口诀
  9. php中水仙花数的求法,php 求水仙花数优化
  10. SAP MM 无价值物料管理的一种实现思路