leetcode546. 移除盒子(dp)
给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色。
你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。每一轮你可以移除具有相同颜色的连续 k 个盒子(k >= 1),这样一轮之后你将得到 k*k 个积分。
当你将所有盒子都去掉之后,求你能获得的最大积分和。
示例:
输入: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] (33=9 分)
----> [1, 3, 3, 3, 1] (11=1 分)
----> [1, 1] (33=9 分)
----> [] (22=4 分)
代码
class Solution {public int removeBoxes(int[] boxes) {int[][][] dp=new int[100][100][100];return getRemoveBoxes(boxes,dp,0,boxes.length-1,0);}public int getRemoveBoxes(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>1&&boxes[r]==boxes[r-1]){k++;r--;}dp[l][r][k]=(k+1)*(k+1)+ getRemoveBoxes(boxes, dp, l, r-1, 0);for(int i=l;i<r;i++)if(boxes[i]==boxes[r]){dp[l][r][k]= Math.max(dp[l][r][k],getRemoveBoxes(boxes, dp, l, i, k+1)+getRemoveBoxes(boxes, dp, i+1, r-1, 0));}return dp[l][r][k];}
}
leetcode546. 移除盒子(dp)相关推荐
- LeetCode 546. 移除盒子 (很难的一道DP)
546. 移除盒子 不解释官方的了... 必须要知道的是,仅仅用[l,r][l,r][l,r]是不够记录状态的,子区间[l,r][l,r][l,r]不仅仅依赖于它的子区间,还依赖之前移动的顺序! 官方 ...
- LeetCode刷题实战546:移除盒子
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...
- LeetCode 546. 移除盒子 | Python
546. 移除盒子 题目 给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色. 你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止.每一轮你可以移除具有相同颜色的连续 k 个 ...
- leetcode 546. 移除盒子 —— 动态规划
将上面记忆化存储的递归算法,改为递推算法.即动态规划法. 546. 移除盒子 题目: 546. 移除盒子 给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色. 你将经过若干轮操作 ...
- LeetCode第 546 题:移除盒子(C++) (弃)
546. 移除盒子 - 力扣(LeetCode) 典型的动态规划最大值问题,单次移除的盒子个数(k)越多,得到的积分 k*k 就会越大,所以每次操作肯定会把连续的相同颜色的盒子都去掉. 注意: 这题还 ...
- Java实现 LeetCode 546 移除盒子(递归,vivo秋招)
546. 移除盒子 给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色. 你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止.每一轮你可以移除具有相同颜色的连续 k 个盒子( ...
- LeetCode 546. 移除盒子(DP)*
文章目录 1. 题目 2. 解题 1. 题目 给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色. 你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止. 每一轮你可以移除具有 ...
- 546. Remove Boxes 移除盒子
给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色. 你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止.每一轮你可以移除具有相同颜色的连续 k 个盒子(k >= 1) ...
- LeetCode#546. 移除盒子 (Python解法+详细分析)
问题描述: 给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色. 你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止.每一轮你可以移除具有相同颜色的连续 k 个盒子(k &g ...
最新文章
- python获取机器唯一标识_开发中常用工具 - 获取设备的唯一标识、UDID、UUID、keychain保存UUID、判断网络...
- HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenCV和OpenCL区别
- 75道常见AI面试题,看看你的知识盲点在哪?(附解析)
- android 一周日历,(Android)获取一周的第一天
- Ruby --- gem(RubyGems)安装与使用
- MyBatis-Plus 快速开始及详测 SpringBoot 集成Mybatis-Plus
- 数值计算动态语言Julia 1.0发布
- [ SAP ASAP ] SAP ASAP 方法论 对SAP项目文档的考核标准、 Documentation Principle
- Codeforces 741 D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
- 每日英文2013.06.19
- 排序(2):直接插入排序
- SourceInsight下面一直出现unable to write to temp file for saving operation 这样的提示
- 【陆勤阅读】参加kaggle数据挖掘竞赛是怎样一种体验?
- leetcode 39. Combination Sum(回溯算法)
- mac 终端 常用命令
- 一文小入门pyQt5 —— 从零到一完成一个Excel文件处理程序
- c语言if常见的错误,C语言if语句的一些小错误
- 哈佛结构/冯诺依曼结构详细分析
- html 数字变成图片,从100到1000数字表图片
- GDPR条例的12项重点分析