第十周 Leetcode 546. Remove Boxes (HARD) 记忆化搜索
2024-08-27 13:31:30
给定一个整数序列,每次删除其中连续相等的子序列,得分为序列长度的平方 求最高得分。
dp方程如下:
memo[l][r][k] = max(memo[l][r][k], dfs(boxes,memo,l,i,k+1) + dfs(boxes,memo,i+1,r-1,0));
意思是在序列的l-r部分后接k长度的 r值序列 所能得到的最大得分。
代码很简单
class Solution {
public:
int removeBoxes(vector<int>& boxes) {
int n=boxes.size();
int memo[100][100][100] = {0};
return dfs(boxes,memo,0,n-1,0);
} int dfs(vector<int>& boxes,int memo[100][100][100], int l,int r,int k){
if (l>r) return 0;
if (memo[l][r][k]!=0) return memo[l][r][k]; while (r>l && boxes[r]==boxes[r-1]) {r--;k++;}
memo[l][r][k] = dfs(boxes,memo,l,r-1,0) + (k+1)*(k+1);
for (int i=l; i<r; i++){
if (boxes[i]==boxes[r]){
memo[l][r][k] = max(memo[l][r][k], dfs(boxes,memo,l,i,k+1) + dfs(boxes,memo,i+1,r-1,0));
}
}
return memo[l][r][k];
}
};
最新文章
- [Modern OpenGL系列(四)]在OpenGL中使用Shader
- ORA-12520: TNS:listener could not find available handler for requested type of server
- 在SQL Server 2014里可更新的列存储索引 (Updateable Column Store Indexes)
- Kotlin语法(其他)
- JS、ActiveXObject、Scripting.FileSystemObject
- BFC——一个我们容易忽视掉的布局神器
- WordPress 4.0 “Benny” 正式发布
- C# 使用TimeSpan计算两个时间差
- 洛谷1890 gcd区间
- 《前端之路》之 前端图片 类型 &; 优化 &; 预加载 &; 懒加载 &; 骨架屏
- Codeforces1099D.Sum in the tree(贪心)
- anaconda4.2.0
- HDU 6088 Rikka with Rock-paper-scissors(NTT+欧拉函数)
- day2_抓包-抓包工具Charles
- 第1章 CLR的执行模型
- [Uliweb]-URL映射
- yum只下载不安装dokcer
- HDU4864 Task
- 经典ARP协议讲解,一定要看
- Node.js frameworks