SPOJ6340 ZUMA - ZUMA
题意:n个珠子排成一排,都有各自的颜色。
你可以选择不少于w个连续同色的珠子消掉,也可以先放着。你还可以任意插入任意颜色的珠子。
求全部消掉至少要插入几个珠子。
解:
什么毒瘤东西......
有个十分难受的DP。状态表示是f[l][r][k]表示在[l, r]这一段,l的左边有额外的k个与l同色的珠子时,把它们全部消去的最少代价。
转移也过于毒瘤。首先有
if k == w -
f[l][r][k] = f[l + ][r][]
else
f[l][r][k] = f[l][r][k + ] +
然后然后还要考虑两段拼起来的情况,就是我们从中间选一段消去。
if(color i == l)
f[l][r][k] = f[l + ][i - ][] + f[i][r][k + ]
这样我们就可以保证正确性了。写成记忆化搜索不用考虑转移顺序。代码十分之短.....
需要注意的是不能把相连的一段同色珠子合并,这样不一定是最优解。(??)
#include <cstdio>
#include <cstring>
#include <algorithm> const int N = , INF = 0x3f3f3f3f; int f[N][N][N], n, a[N], w;
int sum[N], col[N], top; int solve(int l, int r, int k) {
//printf("%d %d %d \n", l, r, k);
if(f[l][r][k] != -) {
return f[l][r][k];
}
if(r < l) {
return ;
} int ans = INF;
if(k + >= w) {
ans = solve(l + , r, );
}
else {
ans = solve(l, r, k + ) + ;
}
for(int i = l + ; i <= r; i++) {
if(col[l] == col[i]) { // [l + 1, i - 1] [i, r]
ans = std::min(ans, solve(l + , i - , ) + solve(i, r, k + ));
}
}
return f[l][r][k] = ans;
} int main() {
memset(f, -, sizeof(f));
scanf("%d%d", &n, &w);
for(int i = ; i <= n; i++) {
scanf("%d", &col[i]);
} int ans = solve(, n, );
printf("%d", ans); return ;
}
AC代码
除此之外还有两种四维状态的DP,一种是f[l][r][k][a]表示把l到r这一段区间消除至只剩a(左/右)端的k个珠子的最小代价。
还有一种是f[l][r][k][s]表示把l到r这一段区间消除至只剩k个s颜色的珠子的最小代价。
写起来比较长,但是应该是比正解好想很多的。我没写,就不贴代码了。
SPOJ6340 ZUMA - ZUMA的更多相关文章
- 「SPOJ6340」「BZOJ1939」ZUMA - ZUMA【记忆化搜索】
题目链接 [洛谷传送门] 题解 \(f[i][j][k]\)表示在消除了\((i,j)\),在后面加上了\(k\)个珠子的总的珠子数. 考虑三种决策:(题目给出的\(k\)在下文表示成\(K\)) 决 ...
- ACM/ICPC 之 双向链表_构造列表-模拟祖玛 (TSH OJ-Zuma(祖玛))
这一题是TsingHua OJ上的一道题目,学堂在线的一位数据结构老师的题目(原创),所以我直接把题目先贴下来了,这道题对复习双向链表很有帮助,而且也对数据结构中List,也就是对列表的回顾也是很有帮 ...
- nfs详解及实现全网备份
1.统一hosts cat /etc/hosts 172.16.1.5 lb01 172.16.1.6 lb02 172.16.1.7 web02 172.16.1.8 web01 172.16.1. ...
- 【集群实战】NFS网络文件共享服务
1. NFS介绍 1.1 什么是NFS? NFS是Network File System的缩写,中文意思是网络文件系统. 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. ...
- bzoj1032 [JSOI2007]祖码Zuma
1032: [JSOI2007]祖码Zuma Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 672 Solved: 335[Submit][Stat ...
- Codeforces Round #336 Zuma
D. Zuma time limit per test: 2 seconds memory limit per test: 512 megabytes input: standard input ...
- Codeforces Round #336 (Div. 2) D. Zuma 区间dp
D. Zuma Genos recently installed the game Zuma on his phone. In Zuma there exists a line of n gems ...
- Codeforces Round #336 (Div. 2) D. Zuma 记忆化搜索
D. Zuma 题目连接: http://www.codeforces.com/contest/608/problem/D Description Genos recently installed t ...
- Codeforces Round #336 (Div. 2) D. Zuma
Codeforces Round #336 (Div. 2) D. Zuma 题意:输入一个字符串:每次消去一个回文串,问最少消去的次数为多少? 思路:一般对于可以从中间操作的,一般看成是从头开始(因 ...
随机推荐
- c# 限制同时启动多个实例程序运行
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using S ...
- [Python]-pip-ReadTimeoutError: Read timed out 问题
问题描述 就是在安装Python包的时候,由于时间太长引起的超时问题 问题解决 第一个办法是更改源地址:在 ~/.pip/ 下创建文件 pip.conf(如果还没有的话), 模版如下: [global ...
- WPF 简易进度条效果
最近做一个项目,看到以前同事写的进度条效果不错,所以,拿来简化了下,不炫,但是项目中还是够用的. 还是,先来看下调用以后的效果 1.因为ProgressbBar的Foreground显示不得不一样,所 ...
- shell脚本事例 -- 获取当前日期的前一天日期
记录一个shell脚本事例,事例中包括shell的一些语法(函数定义.表达式运算.if.case...) #!/bin/sh #获取当前时间 RUN_TIME=`date +%H%M%S` #取当前日 ...
- libgdx学习记录15——音乐Music播放
背景音乐是游戏中必备的元素,好的背景音乐能为游戏加分不少,使人更容易融入到游戏的氛围中去. Music类中主要有以下函数: play()播放 stop()停止 pause()暂停 setVolume( ...
- effective c++ 笔记 (45-48)
//#45 运用成员函数模版接受所有兼容类型 { /* 1:当你使用智能指针的时候,会发生一个问题,想把一个子类的对象赋给基类的指针变得不可能了, 因为智能指针指定了的是基类的类型,而赋给它的是 ...
- 基于HTTPS的中间人攻击-BaseProxy
前言 在上一篇文章BaseProxy:异步http/https代理中,我介绍了自己的开源项目BaseProxy,这个项目的初衷其实是为了渗透测试,抓包改包.在知识星球中,有很多朋友问我这个项目的原理及 ...
- svn commit时报错 File already exists
第一步: 删除当前文件所在文件夹,提交commit 第二步: 新建刚才删除的文件夹,并将先前需要commit的文件放到此文件夹下,再次commit 提交
- WebSplider在线爬虫
WebSplider是什么? WebSplider在线爬虫是一个结合Web技术与爬虫技术的项目. WebSplider支持Web页面进行爬虫配置,提交配置到服务器后,服务器端爬虫程序进行数据抓取,最后 ...
- Istio全景监控与拓扑
根据Istio官方报告,Observe(可观察性)为其重要特性.Istio提供非侵入式的自动监控,记录应用内所有的服务. 我们知道在Istio的架构中,Mixer是管理和收集遥测信息的组件.每一次当请 ...