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 (composed of k boxes, k >= 1), remove them and get k*k points.
Find the maximum points you can get.

Example 1:
Input:

[1, 3, 2, 2, 2, 3, 4, 3, 1]

Output:

23

Explanation:

[1, 3, 2, 2, 2, 3, 4, 3, 1]
----> [1, 3, 3, 4, 3, 1] (3*3=9 points)
----> [1, 3, 3, 3, 1] (1*1=1 points)
----> [1, 1] (3*3=9 points)
----> [] (2*2=4 points)

Approach #1: three dimensional DP. [C++] [Hard]

class Solution {
public:
int removeBoxes(vector<int>& boxes) {
int n = boxes.size();
m_ = vector<vector<vector<int>>>(n, vector<vector<int>>(n, vector<int>(n, 0)));
return dfs(boxes, 0, n-1, 0);
} private:
vector<vector<vector<int>>> m_; int dfs(const vector<int>& boxes, int l, int r, int k) {
if (l > r) return 0;
if (m_[l][r][k] != 0) return m_[l][r][k];
while (l < r && boxes[r-1] == boxes[r]) {--r; ++k;}
m_[l][r][k] = dfs(boxes, l, r-1, 0) + (k + 1) * (k + 1);
for (int i = l; i < r; ++i) {
if (boxes[i] == boxes[r])
m_[l][r][k] = max(m_[l][r][k], dfs(boxes, l, i, k + 1) + dfs(boxes, i + 1, r - 1, 0));
}
return m_[l][r][k];
}
};

  

Analysis:

dp[i][j][k] = max score of subarray b[i] ~ b[j] if there are k boxes that have the same color as b[j] following b[j]. Those k boxes are from box[j+1] ~ box[n], to simulate boxes with other colors are removed first.

Transition:

dp[i][j][k] = dp[i][j-1][0] + (k + 1)^2    # case 1

       dp[i][p][k+1] + dp[p+1][j-1][0]  # case 2

Case 1: drop box[j], remove k + 1 boxes.

Case 2: Try all breakpoints p, attach a[j] to a[p], i <= p < j, box[p] == box[j].

Ans:

dp[0][n-1][0]

Tim complexity: O(n^4) Space complexity: O(n^3)

Reference:

https://zxi.mytechroad.com/blog/dynamic-programming/leetcode-546-remove-boxes/

546. Remove Boxes的更多相关文章

  1. 546 Remove Boxes 移除盒子

    给定一些不同颜色的盒子,以不同的正整数表示.消去连续相同颜色的盒子,直到全部消除完毕为止.每一次消去可以得到k * k分(k为消去盒子的个数, k  >= 1).计算可以得到的最大得分.注意:盒 ...

  2. 第十周 Leetcode 546. Remove Boxes (HARD) 记忆化搜索

    Leetcode546 给定一个整数序列,每次删除其中连续相等的子序列,得分为序列长度的平方 求最高得分. dp方程如下: memo[l][r][k] = max(memo[l][r][k], dfs ...

  3. Leetcode 546. Remove Boxes

    题目链接: https://leetcode.com/problems/remove-boxes/description/ 问题描述 若干个有序排列的box和它们的颜色,每次可以移除若干个连续的颜色相 ...

  4. [LeetCode] Remove Boxes 移除盒子

    Given several boxes with different colors represented by different positive numbers. You may experie ...

  5. [Swift]LeetCode546. 移除盒子 | Remove Boxes

    Given several boxes with different colors represented by different positive numbers. You may experie ...

  6. 动态规划——Remove Boxes

    很久没写博客了,越来越懒了,这次还是要分享LeetCode上一道动态规划的题目,和之前的Ballon Boom那个题(我记得是这个标题吧...)差不多,都是对一个数组的区间进行枚举的题,而且涉及到区间 ...

  7. LeetCode All in One题解汇总(持续更新中...)

    突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...

  8. LeetCode Weekly Contest 25

    1. 507. Perfect Number 显然小于2的都不满足(尤其是负数的情况),进一步,显然质数都不满足,所以小于4的数,直接return false. 然后依次暴力枚举判断到sqrt(n), ...

  9. 算法与数据结构基础 - 深度优先搜索(DFS)

    DFS基础 深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历.嵌套关系处理.回溯等,可以 ...

随机推荐

  1. YII 自带验证码实现

    共三步,分别controllers,models,views各一层添置一行代码即可实现 第一步在controllers添加 public function actions() { return arr ...

  2. forbidden Derby database starting with weblogic instance

    Now doing a new project  which  choose the newest weblogic 12.1.2.0.0 as web container.But found the ...

  3. 12 MySQL--内置功能介绍

    mysql内置功能: 1.视图 2.触发器 3.存储过程 4.事务 5.函数 6.函数流程控制 一.视图 介绍: 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名] ...

  4. 迷你MVVM框架 avalonjs 0.84发布

    本版本只要做了如下改进 重构ui绑定 fix scanTag bug ms-include 的值必须不为空值,否则不做任何操作.

  5. Redis 键空间通知

    [Redis 键空间通知] 键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件. 以下是一些键空间通知发送的事件的例子: 所有修改键的命令. 所有接收到 ...

  6. Layer Comps

    [What is Layer Comps] Designers often create multiple compositions(comps) of a page layout to show c ...

  7. php之trait 个人笔记

    自从 php 5.4 起 实现了一种代码复用的方式(tarit) 类似 class  但是用tarit 写的类 不能被实例化 和继承.现在来看看他的用法 <?php trait A{ publi ...

  8. Luogu 5170 【模板】类欧几里得算法

    原理不难但是写起来非常复杂的东西. 我觉得讲得非常好懂的博客.   传送门 我们设 $$f(a, b, c, n) = \sum_{i = 0}^{n}\left \lfloor \frac{ai + ...

  9. sql拼接字符串

    update boc_loan_apply set birthday=concat(birthday,'-01');

  10. 成为一名自由UX设计师--你“够格”吗?

    和传统的朝九晚五,三点一线的生活状态相比,现在互联网时代下的年轻人更崇尚对自由的追求.“可任意支配时间”.“工作场所自由”和“收入高”是人们选择成为自由职业者的主要原因.特别是IT行业中的设计师群体, ...