BZOJ1260 CQOI2007 涂色paint


Description

假设你有一条长度为5的木版,初始时没有涂过任何颜色。你希望把它的5个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为5的字符串表示这个目标:RGBGR。 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色。例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标。 用尽量少的涂色次数达到目标。

Input

输入仅一行,包含一个长度为n的字符串,即涂色目标。字符串中的每个字符都是一个大写字母,不同的字母代表不同颜色,相同的字母代表相同颜色。

Output

仅一行,包含一个数,即最少的涂色次数。

Sample Input

Sample Output

【样例输入1】
AAAAA
【样例输入1】
RGBGR
【样例输出1】
1
【样例输出1】
3

HINT

40%的数据满足:1<=n<=10
100%的数据满足:1<=n<=50


暴搜的范围,然而却是区间DP


考虑dpi,j表示把区间[l,r]染成目标状态的最小次数

首先我们判断一下al是不是等于ar​,如果是的话可以从
min(dp{l,r−1},dp{l+1,r},dp{l+1,r−1}+1)转移的

然后再枚举中间的分界点mid
判断一下a_mid​是不是等于a_mid+1​
是的话可以从dp{l,mid}+dp{mid+1,r−1}转移
否则可以从dp{l,mid}+dp{mid+1,r}​转移


 #include<bits/stdc++.h>
using namespace std;
#define N 60
int dp[N][N],n;
char a[N];
int main(){
memset(dp,0x3f,sizeof(dp));
scanf("%s",a+);
n=strlen(a+);
if(n==){printf("");return ;}
for(int i=;i<=n;i++)dp[i][i]=;
for(int len=;len<=n;len++)
for(int l=;l+len-<=n;l++){
int r=l+len-;
if(a[l]==a[r]){
dp[l][r]=min(dp[l][r-],dp[l+][r]);
dp[l][r]=min(dp[l][r],dp[l+][r-]+);
}
for(int mid=l;mid<r;mid++){
if(a[mid]==a[mid+])dp[l][r]=min(dp[l][r],dp[l][mid]+dp[mid+][r]-);
else dp[l][r]=min(dp[l][r],dp[l][mid]+dp[mid+][r]);
}
}
printf("%d",dp[][n]);
return ;
}

BZOJ1260 CQOI2007 涂色paint 【区间DP】的更多相关文章

  1. [BZOJ1260][CQOI2007]涂色paint 区间dp

    1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MB Submit: 1575  Solved: 955 [Submit][S ...

  2. 【BZOJ-1260】涂色paint 区间DP

    1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 1147  Solved: 698[Submit][Sta ...

  3. BZOJ 1260: [CQOI2007]涂色paint( 区间dp )

    区间dp.. dp( l , r ) 表示让 [ l , r ] 这个区间都变成目标颜色的最少涂色次数. 考虑转移 : l == r 则 dp( l , r ) = 1 ( 显然 ) s[ l ] = ...

  4. 【bzoj1260】[CQOI2007]涂色paint 区间dp

    题目描述 给出一个序列,每次可以给一段染成同一种颜色,问最少要染多少次能够染成给定方案. 输入 输入仅一行,包含一个长度为n的字符串,即涂色目标.字符串中的每个字符都是一个大写字母,不同的字母代表不同 ...

  5. B1260 [CQOI2007]涂色paint 区间dp

    这个题和我一开始想的区别不是很大,但是要我独自做出来还是有一些难度. 每一次涂色 只有这两种可能: 1) 把一段未被 覆盖过的区间 涂成 * 色 2) 把一段被一种颜色覆盖的区间涂成 * 色 (并且 ...

  6. CQOI2007 涂色 paint (区间dp)

    听说这道题是当年省选题 于是兴致勃勃拿来做了做 至于如何想到思路... 事实上没想象中那么简单... 脑阔挺疼的... (一开始都没看出来是区间dp) 想到可以区间dp,然后就似乎没啥大问题 枚举区间 ...

  7. bzoj千题计划185:bzoj1260: [CQOI2007]涂色paint

    http://www.lydsy.com/JudgeOnline/problem.php?id=1260 区间DP模型 dp[l][r] 表示涂完区间[l,r]所需的最少次数 从小到大们枚举区间[l, ...

  8. 2018.09.17 bzoj1260: [CQOI2007]涂色paint(区间dp)

    传送门 区间dp简单题啊. 很显然用f[l][r]f[l][r]f[l][r]表示把区间[l,r][l,r][l,r]按要求染好的代价. 这样可以O(n)O(n)O(n)枚举断点转移了啊. 显然如果断 ...

  9. BZOJ1260 [CQOI2007]涂色paint 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1260 题意概括 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂 ...

随机推荐

  1. maven--spring-boot-starter-parent 小结

    Maven中的dependency的scope作用域详解 https://blog.csdn.net/itchiang/article/details/45009057 https://blog.cs ...

  2. Dive into Spring framework -- 了解基本原理(二)--设计模式-part2

    Template模式 Template模式顾名思义是提供了一种模板,也就是针对某种业务提供了模范框架.这个在spring中是属于核心模式的,因为其ApplicationContext抽象类就是模板模式 ...

  3. 尽量不要使用using namespace std

    C++标准程序库中的所有标识符都被定义于一个名为std的namespace中. namespace是指标识符的各种可见范围.命名空间用关键字namespace 来定义.命名空间是C++的一种机制,用来 ...

  4. Thread的中断机制(interrupt),循环线程停止的方法

    一.中断原理 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的任务或是继续运行至下一步,就取决于这个 ...

  5. 基于JQuery 的消息提示框效果代码

    提示框效果 一下是封装到 Jquery.L.Message.js 中的JS文件内容 var returnurl = ''; var messagebox_timer; $.fn.messagebox ...

  6. go Rails 知识点,Concepts Series:url和parameter; 建立Rails App Templates;报错页面debug; counter_cache

    Rails Concepts Series: https://gorails.com/series/rails-concepts 基本都是免费的 一些细小的知识点,很有帮助. URL和paramete ...

  7. javascript中的__proto__ 和prototype

    不错的一张图

  8. uva10600次小生成树模板题

    裸题,上模板就行,注意j  !  =  k #include<map> #include<set> #include<cmath> #include<queu ...

  9. java7与java8的新特性

    java7 新特性: 1. switch 里面的 case 条件可以使用字符串了. 2. 运用 List\tempList = new ArrayList<>(); 即泛型实例化类型自动判 ...

  10. Zeratul的完美区间(线段树||RMQ模板题)

    原题大意:原题链接 给定元素无重复数组,查询给定区间内元素是否连续 解体思路:由于无重复元素,所以如果区间内元素连续,则该区间内的最大值和最小值之差应该等于区间长度(r-l) 解法一:线段树(模板题) ...