CF1114D Flood Fill(DP)
题目链接:CF原网
题目大意:$n$ 个方块排成一排,第 $i$ 个颜色为 $c_i$。定义一个颜色联通块 $[l,r]$ 当且仅当 $l$ 和 $r$ 之间(包括 $l,r$)所有方块的颜色相同。现在你可以选定一个起始位置 $p$,每次将 $p$ 所在颜色联通块的所有方块颜色改成另一种。这个操作可能将两个颜色联通块合并成一个。问最少要多少步,能让 $[1,n]$ 变成一个颜色联通块。
$1\le n,c_i\le 5000$。
其实是个很水的区间DP啊……为什么会有同学说不做呢……
毕竟我能在考场上想到的DP能是难题吗……
根据定义,$p$ 所在的颜色联通块就是一个区间。而且这个区间只会往外扩张,不会往里收缩。
那就轻松的DP了。
首先把一开始就是联通块的压成一块,不影响答案,而且会使下面的DP更快。比如,$5\ 3\ 3\ 1\ 4\ 4\ 2\ 4$ 可以压缩成 $5\ 3\ 1\ 4\ 2\ 4$。
(下面假设压缩后长度为 $m$)
令 $dp_{l,r}$ 表示目前 $[l,r]$ 是包含起始位置的极长颜色联通块(也就是不被其它联通块包含),需要将 $[1,m]$ 变为同色的还需要的最小步数。
起始状态:$dp_{1,m}=0$。
答案是所有 $dp_{i,i}$ 的最小值。
转移:如果一个联通块要变色,那么只有可能变成 $l-1$ 的颜色或者 $r+1$ 的颜色。
$l\neq 1$ 时,$dp_{l,r}=\min(dp_{l,r},dp_{l-1,r}+1)$。
$r\neq m$ 时,$dp_{l,r}=\min(dp_{l,r},dp_{l,r+1}+1)$。
注意还要判断 $l-1$ 和 $r+1$ 颜色相同:
$l\neq 1,r\neq m$ 且 $c_{l-1}=c_{r+1}$ 时,$dp_{l,r}=\min(dp_{l,r},dp_{l-1,r+1}+1)$。
时间复杂度 $O(n^2)$。
代码中我用的是记忆化搜索。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int maxn=;
#define MP make_pair
#define PB push_back
#define lson o<<1,l,mid
#define rson o<<1|1,mid+1,r
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline int read(){
char ch=getchar();int x=,f=;
while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return f?-x:x;
}
int n,a[maxn],m,b[maxn],f[maxn][maxn];
int solve(int l,int r){
if(l== && r==m) return ;
if(f[l][r]) return f[l][r];
int ans=INT_MAX;
if(l!=) ans=min(ans,solve(l-,r));
if(r!=m) ans=min(ans,solve(l,r+));
if(l!= && r!=m && b[l-]==b[r+]) ans=min(ans,solve(l-,r+));
return f[l][r]=ans+;
}
int main(){
n=read();
FOR(i,,n){
a[i]=read();
if(a[i]!=a[i-]) b[++m]=a[i];
}
int ans=INT_MAX;
FOR(i,,m) ans=min(ans,solve(i,i));
printf("%d\n",ans);
}
CF1114D Flood Fill(DP)的更多相关文章
- Codeforces1114 D. Flood Fill (DP)(整个区间染成同色)
题意:连续的几个颜色相同的格子称为一个连通块.选一个点为起点,每个操作是把所在连通块变一个颜色,求把整个区间染成同色需要的最少操作数.(注意,每次只能改变所在连通块的颜色,不能任选连通块,除了最开始时 ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
- Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)
Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...
随机推荐
- MySQL高可用方案MHA在线切换的步骤及原理
在日常工作中,会碰到如下的场景,如mysql数据库升级,主服务器硬件升级等,这个时候就需要将写操作切换到另外一台服务器上,那么如何进行在线切换呢?同时,要求切换过程短,对业务的影响比较小. MHA就提 ...
- iOS APP 中H5视频默认全屏播放问题解决
问题描述:在Android中,视频可以正常在H5页面局部播放,iOS中则自动切换至全屏模式. 查看资料得以解决,20190301记录下来. 解决方法:IOS10及以后,在 video标签页中只包含 w ...
- 数据处理项目Postmortem
数据处理项目Postmortem 1. 设想和目标 1)目标我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的项目是学霸系统PipeLine,软件主要解决学霸系 ...
- Beta版测试报告
Beta版测试报告 测试中发现的Bug: Version 2.0 Bug List 1. 在动态监测界面,若随便点击“开始”.“关闭”.“结束”.红叉,会出现不定式崩溃现象. 2. 处理空数据时可能会 ...
- HDU 2043 密码
http://acm.hdu.edu.cn/showproblem.php?pid=2043 Problem Description 网上流传一句话:"常在网上飘啊,哪能不挨刀啊-" ...
- activiti-ldap-integration
https://stackoverflow.com/questions/19488764/activiti-ldap-integration https://community.alfresco.co ...
- Java的Vector源码阅读
* The {@code Vector} class implements a growable array of * objects. Like an array, it contains comp ...
- Oracle10.2.0.1以及其他版本升级Oracle10.2.0.5的简单步骤
Oracle没有发布 完整版的 Oracle 10.2.0.5 的安装包,只能是通过安装完10.2.0.4 之后再升级10.2.0.5 这一点挺坑的. 建安记录一下步骤. 1. 挂载Oracle10. ...
- CentOS virt-manager 安装Win2008r2的一种GUI方法
1. 必须在物理机上面安装CentOS机器. 安装方法上一个blog里面简单写过. 注意一点,重复安装时 总是提示no disk found 我的解决办法使用 windows 安装盘 格式化了下磁盘重 ...
- 配置自己的Maven方式并使用Maven 运行项目Idea的maven的项目
(1) 当安装了 maven之后,需要导入项目代码,然后编译执行: 打开Idea ==>然后点击小扳手==>在搜索框中输入maven==>然后找到 Maven home direct ...