D. Flood Fill

链接

题意:

  一个颜色序列,每个位置有一个颜色,选择一个起始位置,每次可以改变包含这个位置的颜色段,将这个颜色段修改为任意一个颜色, 问最少操作多少次。n<=5000

分析:

  区间dp。

  dp[i][j][0/1]表示当前的区间是l~r,把这一段变成一个颜色的最少次数,最后一个改变的颜色是最左边/最右边的一段。

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ;
int f[N][N][], a[N], b[N]; int dp(int l,int r,int p) {
if (l > r) return ;
if (l == r) return ;
if (f[l][r][p]) return f[l][r][p];
int &res = f[l][r][p];
if (p == ) {
res = dp(l + , r, ) + (a[l + ] != a[l]);
res = min(res, dp(l + , r, ) + (a[r] != a[l]));
}
else {
res = dp(l, r - , ) + (a[l] != a[r]);
res = min(res, dp(l, r - , ) + (a[r - ] != a[r]));
}
return res;
}
int main() {
int n = read();
for (int i = ; i <= n; ++i) a[i] = read();
int cnt = ;
for (int i = ; i <= n; ++i) if (a[i] != a[i - ]) b[++cnt] = a[i];
n = cnt;
for (int i = ; i <= n; ++i) a[i] = b[i];
cout << min(dp(, n, ), dp(, n, ));
return ;
}

最新文章

  1. Linux Shell中单引号、双引号、反引号的区别【转载】
  2. 响应式疑惑? CSS单位研究
  3. Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS
  4. mongo db 分享 ppt
  5. asp.net解决高并发的方案.
  6. 一个问题:关于类型转换Type Cast(汇编讲解 as 语法)
  7. SQL点滴35—SQL语句中的exists
  8. springCloud四:熔断器ribbon--Hystrix
  9. IOC框架之 Unity 入门
  10. 同步、异步、阻塞、非阻塞与future
  11. BZOJ1030 [JSOI2007]文本生成器 AC自动机 动态规划
  12. 转:JDBC中关于PreparedStatement.setObject的一些细节说明
  13. Spring全家桶系列–SpringBoot渐入佳境
  14. SQLServer------基本操作
  15. 03: JavaScript基础
  16. py自动化之环境配置
  17. Linux下手工卸载11.2 RAC(非MOS的deinstall方法)
  18. Mac下常用按键符号⌘(command)、⌥(option)、⇧(shift)、⇪(caps lock)、⌃(control)、↩(return)、⌅(enter)
  19. SQL Server 2000 ——DBCC命令
  20. Android开发实战之ViewPager实现向导界面

热门文章

  1. MySQL Bug导致异常宕机的分析流程
  2. iOS开发中常用的数学函数
  3. iOS7中UIView的animateKeyframesWithDuration方法讲解
  4. RTCM32转码至RTCM23,再次测试,一些收获
  5. 导出类成员里含有stl对象
  6. 寒假短期学习计划 - C++
  7. 1202. [HNOI2005]狡猾的商人【贪心 或 并查集】
  8. C# HttpWebRequest请求超时解决办法
  9. swoole_table测试
  10. Django提示Unknown database处理方法