「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实现)
一,功能点 后台管理系统,添加用户时.对注册的新用户邮箱发送初始密码. 二,代码实现 1.Mail实体类 public class Mail { private Set<String> r ...
- 学习 yii2.0——视图之间相互包含
布局 首先创建一个布局文件simple.php,路径是在views/layout/目录下. <p>this is header</p> <?= $content ?> ...
- babel (三) babel polly-fill
Babel includes a polyfill that includes a custom regenerator runtime and core-js. This will emulate ...
- oracle查询不走索引的一些情况(索引失效)
Oracle建立索引的目的是为了避免全表扫描,提高查询的效率. 但是有些情况下发现即使建立了索引,但是写出来的查询还是很慢,然后会发现是索引失效导致的,所以需要了解一下那些情况会导致索引失效,即查询不 ...
- [转帖]pfSense软路由系统的使用
图解pfSense软路由系统的使用(NAT功能) http://seanlook.com/2015/04/23/pfsense-usage/ 发表于 2015-04-23 | 更新于: 2015- ...
- php 生成订单号201807205598981
php版 /** * 生成唯一订单号 */ public function build_order_no() { $no = date('Ymd').substr(implode(NULL, arra ...
- MySQL5.5 安装配置方法教程
MySQL下载地址:http://dev.mysql.com/downloads/installer/ 1.首先进入的是安装引导界面 2.然后进入的是类型选择界面,这里有3个类型:Typical(典型 ...
- 安装MongoDB(做成Windows服务)并加载C#驱动程序
一 Mongodb简介: 通过查询网上的一些信息来介绍一下Mongodb的优势:MongoDB是一个面向文档的数据库,目前由10gen开发并维护,它的功能丰富,齐全,完全可以替代MySQL.在使用Mo ...
- GitHub & OAuth 2.0 & JWT
GitHub & OAuth 2.0 & JWT https://www.rfcreader.com/#rfc6749 GitHub & OAuth https://www.b ...
- 二、两条Linux删除数据跑路命令
一.rm rm -rf / 无提示循环删除根目录,,删除存在被恢复的可能 二.dd dd if=/dev/urandom of=/dev/hda1 随机填写数据到相应分区,直到填满为止.重写后的分区无 ...