「SPOJ6340」「BZOJ1939」ZUMA - ZUMA【记忆化搜索】
题目链接
题解
\(f[i][j][k]\)表示在消除了\((i,j)\),在后面加上了\(k\)个珠子的总的珠子数。
考虑三种决策:(题目给出的\(k\)在下文表示成\(K\))
决策1
当\(k<K-1\)时,可以考虑在加一个珠子,也就是状态\(f[i][j][k+1]\)转移得到\(f[i][j][k]\)。因为加上了一个珠子,那么就方程为\(f[i][j][k]=min(f[i][j][k+1]+1)\)
决策2
如果\(k=K+1\),说明这个可以消除,也就是从\(f[i][j][k]=f[i+1][j][0]\)。
决策3
如果\(i\)的颜色和\(i+1\)的颜色相同,那么可以把\(i\)加入到\(i+1\)中,那么方程就是\(f[i][j][k]=f[i+1][j][k+1]\)。
答案显然就是\(f[1][n][0]\)。
鉴于这一道题目方程和方程之间状态的转移比较零散,所以用记忆化搜索实现比较简单。
代码
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define N 105
using namespace std;
int f[N][N][N], a[N];
int n, K;
int DP(int l, int r, int k) {
if (f[l][r][k] != -1) return f[l][r][k];
if (l > r) return 0;
f[l][r][k] = inf;
if (k < K - 1) f[l][r][k] = min(f[l][r][k], DP(l, r, k + 1) + 1);
if (k == K - 1) f[l][r][k] = DP(l + 1, r, 0);
for (int i = l + 1; i <= r; i ++)
if (a[i] == a[l]) f[l][r][k] = min(f[l][r][k], DP(l + 1, i - 1, 0) + DP(i, r, min(K - 1, k + 1)));
return f[l][r][k];
}
int main() {
ios::sync_with_stdio(false);
cin >> n >> K;
for (int i = 1; i <= n; i ++) cin >> a[i];
memset(f, -1, sizeof(f));
DP(1, n, 0);
cout<< f[1][n][0] << endl;
return 0;
}
「SPOJ6340」「BZOJ1939」ZUMA - ZUMA【记忆化搜索】的更多相关文章
- LG2530 「SHOI2001」化工厂装箱员 高维DP+记忆化搜索
问题描述 LG2530 题解 设\(opt[i][a][b][c][d]\)代表装到第\(i\)个后,第\(1,2,3\)手上分别还剩\(a,b,c\)个的最小操作数. 记忆化搜索即可. 启示:如果状 ...
- Codeforces Round #336 (Div. 2) D. Zuma 记忆化搜索
D. Zuma 题目连接: http://www.codeforces.com/contest/608/problem/D Description Genos recently installed t ...
- 【CF607B】Zuma——区间dp(记忆化搜索/递推)
以下是从中文翻译成人话的题面: 给定一个长度小于等于500的序列,每个数字代表一个颜色,每次可以消掉一个回文串,问最多消几次可以消完? (7.16) 这个题从洛谷pend回来以后显示有103个测试点( ...
- 「kuangbin带你飞」专题二十二 区间DP
layout: post title: 「kuangbin带你飞」专题二十二 区间DP author: "luowentaoaa" catalog: true tags: - ku ...
- 「kuangbin带你飞」专题十二 基础DP
layout: post title: 「kuangbin带你飞」专题十二 基础DP author: "luowentaoaa" catalog: true tags: mathj ...
- 众安「尊享e生」果真牛的不可一世么?
近日,具有互联网基因的.亏损大户(成立三年基本没盈利,今年二季度末亏损近4亿,你能指望它多厉害?).财产险公司—众安推出“尊享e生”中高端医疗保险(财险公司经营中高端医疗真的很厉害?真的是中高端医疗险 ...
- XCActionBar 「Xcode 中的 Alfred」
下载地址:https://github.com/pdcgomes/XCActionBar 基本命令: (1)「command+shift+8」或者双击「command」键可以打开「动作输入框窗口」 ( ...
- Git 执行 「fork 出来的仓库」和「最新版本的原仓库」内容同步更新
当我们在 GitHub 上 fork 出一个仓库后,如果原仓库更新了,此时怎样才能保证我们 fork 出来的仓库和原仓库内容一致呢?我们一般关注的是仓库的 master(主干分支)的内容,通过以下步骤 ...
- 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇
http://www.4gamer.net/games/216/G021678/20140714079/ 连载第2回的本回, Arc System Works开发的格斗游戏「GUILTY G ...
随机推荐
- Java Map 集合实现类
Map 用于保存具有映射关系的数据,集合里会保存两组值,一组用于保存Map里的key,一组用于保存Map里的value,key与map可以是任何引用类型数据.Map的key不允许重复.key与valu ...
- Oracle 表空间不足引起的问题及解决方法
-- 1 向数据库导入数据时报了ORA-01653: unable to extend table错误,网上查了下原因是由于表空间不足引起的: 查询表空间使用情况语句 select a.tablesp ...
- Azure系列2.1.12 —— CloudBlobDirectory
(小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...
- UTC时间、GMT时间、本地时间、Unix时间戳
引用: https://blog.csdn.net/u012102306/article/details/51538574 https://blog.csdn.net/foxir/article/de ...
- C# Note34: 异常机制相关小点
1.使用throw和throw ex抛出异常的区别 通常,我们使用try/catch/finally语句块来捕获异常,那么在抛出异常的时候,使用throw和throw ex有什么区别呢? 假如,按顺序 ...
- 剑指offer(19)二叉树中和为某一值的路径
题目: 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大的 ...
- springMVC中@RequestParam和@RequestBody的作用
@RequestParam和@RequestBody是什么区别,估计很多人还是不太清楚, 因为一般用@ RequestParam就足够传入参数了,要说他们区别,就需要知道contentType是什么? ...
- Android——SMS接收发短信与运行权限
好久没写了,最近学习Android的相关知识,包括UI组件与布局.Activity生命周期等,而这次要讲的是,Broadcast Receiver的相关知识,主要是接收发短信,SmsManager.S ...
- 如何抓取电商的数据 & Python
如何抓取电商的数据 & Python https://www.zhihu.com/question/40720286 https://www.zhihu.com/question/382455 ...
- 工程师常犯的web后台界面用户体验错误