「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 ...
随机推荐
- Mysql 索引问题集锦
一.Mysql 中的索引 索引:顾名思义用来检索.查找数据的key (字段) 几种Mysql 中的常见索引分类:普通索引(联合索引).唯一索引.主键索引.全文索引 优点:使得查询数据变快 缺点:更新数 ...
- C#复习笔记(4)--C#3:革新写代码的方式(用智能的编译器来防错)
用智能的编译器来防错 本章的主要内容: 自动实现的属性:编写由字段直接支持的简单属性, 不再显得臃肿不堪: 隐式类型的局部变量:根据初始值推断类型,简化局部变量的声明: 对象和集合初始化程序:用一个表 ...
- opencv自带fast_math.hpp
cvRound cvFloor cvCeil cvIsNaN cvIsInf
- jQuery EasyUI 选项卡面板tabs使用实例精讲
1. 对选项卡面板区域 div 设置 class=”easyui-tabs” 2. 对选项卡面板区域添加多个 div,每个 div 就是一个选项卡(每个面板一定设置 title) 3. 设置面板 fi ...
- Mermaid js与流程图、甘特图..
https://mermaidjs.github.io/gantt.html https://github.com/jdbranham/grafana-diagram 用 mermaid 画甘特图 h ...
- Chrome & QR Code Reader
Chrome & QR Code Reader Allows to generate a QR Code for the current page and scan a QR Code usi ...
- Yii2的客户端验证
如何配置Yii的客户端验证呢? 首先,应该配置验证规则的场景,即scenario 其次,应该配置验证规则,在验证规则中配置客户端验证 例如:
- PHP金额工具类之将阿利伯数字转换为大写中文数字
1.将阿拉伯数字转换为中文大写数字 <?php namespace core\components; class PriceHelper extends \yii\base\Component{ ...
- django celery redis 定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- Python memecache
memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载,故常用来做数据库缓存.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态 ...