【Codeforces 1114D】Flood Fill
【链接】 我是链接,点我呀:)
【题意】
你选择一个point作为start_position
然后每次你可以将包含该start_position的所有联通块变成任意颜色
问你最少要多少次变换才能将所有的方块变成相同颜色.
【题解】
设dp[i][j][0]表示将i..j这个区间的所有方块变成a[i]所需的次数
设dp[i][j][1]表示将i..j这个区间的所有方块变成a[j]所需的次数
从小到大枚举区间长度。
然后做一个区间dp就好了
注意dp[i][j][0]不能由dp[i][j-1][0]或者是dp[i][j-1][1]转移过来
因为dp[i][j-1][0]或是dp[i][j-1][1]会先到达dp[i][j][1]这个状态不能直接到达dp[i][j][0]这个状态
(可能和dp[i][j][0]表示的状态一样,但是还需要经过一次转移才能到,所以不能从其直接转移过去)
只能由dp[i+1][j][0]或者是dp[i+1][j][1]直接转移过来
(不能理解的话再去看看题意>_
【代码】
#include <bits/stdc++.h>
using namespace std;
const int N = 5000;
int a[N+10],c[N+10],n;
int dp[N+10][N+10][2];
int cmp(int x,int y){
if (x!=y)
return 1;
else
return 0;
}
int main(){
scanf("%d",&n);
for (int i = 1;i <= n;i++) scanf("%d",&c[i]);
int nn = 0;
for (int i = 1;i <= n;i++) {
int j = i;
while (j+1<=n && c[j+1]==c[i]) j++;
a[++nn] = c[i];
i = j;
}
n = nn;
for (int i = 1;i <= n;i++)
for (int j = 1;j <= n;j++)
for (int k = 0;k <= 1;k++)
dp[i][j][k] = 6000;
for (int i = 1;i <= n;i++) {
dp[i][i][0] = 0;
dp[i][i][1] = 0;
}
for (int l = 2;l <= n;l++)
for (int i = 1;i <= n;i++) {
int j = i+l-1;
if (j>n) break;
dp[i][j][0] = min(dp[i][j][0], dp[i+1][j][0] + 1);
dp[i][j][0] = min(dp[i][j][0], dp[i+1][j][1] + cmp(a[i],a[j]));
dp[i][j][1] = min(dp[i][j][1], dp[i][j-1][0] + cmp(a[i],a[j]));
dp[i][j][1] = min(dp[i][j][1], dp[i][j-1][1] + 1);
}
printf("%d\n",min(dp[1][n][0],dp[1][n][1]));
return 0;
}
【Codeforces 1114D】Flood Fill的更多相关文章
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【codeforces 510B】Fox And Two Dots
[题目链接]:http://codeforces.com/contest/510/problem/B [题意] 让你在一个二维的方格里面找环; 两个点有相邻的边它们才是相连的; 有环YES,没环NO ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- 【codeforces 707C】Pythagorean Triples
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
- 【codeforces 709D】Recover the String
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
- 【codeforces 709B】Checkpoints
[题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...
- 【codeforces 709C】Letters Cyclic Shift
[题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...
- 【Codeforces 429D】 Tricky Function
[题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...
- 【Codeforces 670C】 Cinema
[题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...
随机推荐
- MODULE_DEVICE_TABLE的理解【转】
本文转载自:http://blog.csdn.net/sidely/article/details/39666471 在Linux IIC驱动中看到一段代码: static struct platfo ...
- ubuntu下设置共享目录
在使用VirtualBox和相关的客户机系统比如XPMac等需要用到一些相关功能共享剪贴板等等这时候需要安装VirtualBox中的一个工具叫做Guest Additions中文叫法不一增强工具包功能 ...
- webpack的初步使用(01)
webpack:1.安装:在项目文件下先npm init初始化,一路回车2.进入到建立的项目下:cd projectname3.安装webpack:npm install webpack --save ...
- “国家队爷”杯液体战争AI比赛!!__SymenYang
原帖 这两天一直在搞这个AI,提供的样例更本不是我的风格啊,看不懂更不会改... 所以我自己写了一个AI的平台,现在在不断的修改AI的策略,smart样例还是很容易过的,让line的行走速度变慢一点到 ...
- scrapy框架简介和基础应用(python爬虫)
一.什么是scrapy? scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍,所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,持久化等)的具有 ...
- 题解报告:poj 3070 Fibonacci
题目链接:http://poj.org/problem?id=3070 Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, a ...
- Zookeeper概念学习系列之zookeeper的数据模型
1.层次化的目录结构,命名符合常规文件系统规范. 2.每个节点在zookeeper中叫做znode,并且有其有一个唯一的路径标识. 3.znode中的数据可以有多个版本,比如某一路径下存有多个数据版本 ...
- [转]java处理高并发高负载类网站的优化方法
本文转自:http://www.cnblogs.com/pengyongjun/p/3406210.html java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,ja ...
- 2 我们的C#学习方法
在这里我们借鉴了一种行之有效的学习编程语言的方法,并在此基础上进行了相应的改良.我们在培训新人中使用后,发现这种学习方法是非常有效的. 你通过做以下几个步骤来一步步学习C#语言. 1. 搞懂每一个我们 ...
- Eclipse中搭建Apache Tomcat7源码调试环境
第一步:获取Apache Tomcat7源码,读者可以从Apache 官方网站获取,官方下载地址: http://tomcat.apache.org/download-70.cgi 注意选择Sourc ...