BZOJ1260 CQOI2007 涂色paint 【区间DP】
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】的更多相关文章
- [BZOJ1260][CQOI2007]涂色paint 区间dp
1260: [CQOI2007]涂色paint Time Limit: 30 Sec Memory Limit: 64 MB Submit: 1575 Solved: 955 [Submit][S ...
- 【BZOJ-1260】涂色paint 区间DP
1260: [CQOI2007]涂色paint Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 1147 Solved: 698[Submit][Sta ...
- BZOJ 1260: [CQOI2007]涂色paint( 区间dp )
区间dp.. dp( l , r ) 表示让 [ l , r ] 这个区间都变成目标颜色的最少涂色次数. 考虑转移 : l == r 则 dp( l , r ) = 1 ( 显然 ) s[ l ] = ...
- 【bzoj1260】[CQOI2007]涂色paint 区间dp
题目描述 给出一个序列,每次可以给一段染成同一种颜色,问最少要染多少次能够染成给定方案. 输入 输入仅一行,包含一个长度为n的字符串,即涂色目标.字符串中的每个字符都是一个大写字母,不同的字母代表不同 ...
- B1260 [CQOI2007]涂色paint 区间dp
这个题和我一开始想的区别不是很大,但是要我独自做出来还是有一些难度. 每一次涂色 只有这两种可能: 1) 把一段未被 覆盖过的区间 涂成 * 色 2) 把一段被一种颜色覆盖的区间涂成 * 色 (并且 ...
- CQOI2007 涂色 paint (区间dp)
听说这道题是当年省选题 于是兴致勃勃拿来做了做 至于如何想到思路... 事实上没想象中那么简单... 脑阔挺疼的... (一开始都没看出来是区间dp) 想到可以区间dp,然后就似乎没啥大问题 枚举区间 ...
- bzoj千题计划185:bzoj1260: [CQOI2007]涂色paint
http://www.lydsy.com/JudgeOnline/problem.php?id=1260 区间DP模型 dp[l][r] 表示涂完区间[l,r]所需的最少次数 从小到大们枚举区间[l, ...
- 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)枚举断点转移了啊. 显然如果断 ...
- BZOJ1260 [CQOI2007]涂色paint 动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1260 题意概括 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂 ...
随机推荐
- 08_MySQL DQL_SQL99标准中的多表查询(内连接)
# sql99语法/*语法: select 查询列表 from 表1 别名 [连接类型] join 表2 别名 on 连接条件 [where 筛选条件] [group by 分组] [having 分 ...
- 如何制作自己的R包?
摘自 方匡南 等编著<R数据分析-方法与案例详解>.电子工业出版社 R包简介 R包提供了一个加载所需代码.数据和文件的集合.R软件自身就包含大约30种不同功能的包,这些基本包提供了R软件的 ...
- Eclipse 使用中遇到的一些问题!
解决办法~ 1.先检查本地svn 版本与Eclipse 中svn插件 的区别 2.发现版本一致,没解决,发现如图 发现 svn接口报错 javaHL(JNI) Not Available!@ 所以 ...
- vue.js学习之组件(上篇)
本文的Demo和源代码已放到GitHub,如果您觉得本篇内容不错,请点个赞,或在GitHub上加个星星! https://github.com/zwl-jasmine95/Vue_test 以下所有知 ...
- 关于Java中常用加密/解密方法的实现
安全问题已经成为一个越来越重要的问题,在Java中如何对重要数据进行加密解密是本文的主要内容. 一.常用的加密/解密算法 1.Base64 严格来说Base64并不是一种加密/解密算法,而是一种编码方 ...
- Performance js
转贴:https://10up.github.io/Engineering-Best-Practices/javascript/#performance Performance Writing per ...
- 学习opencv(持续更新)
redhat安装,报错解决方法 1 升级GCC,http://mirrors.kernel.org/gnu/gcc/ 2 更换稳定版本 #!/bin/bash yum -y install gcc g ...
- day31 堡垒机尾声 + Python与金融量化分析(一)
堡垒机尾声: 代码案例:https://github.com/liyongsan/git_class/tree/master/day31 课堂笔记:file send: 1.选择本地文件 2.远程路径 ...
- 032——VUE中表单控件处理之复选框的处理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HTML条件注释判断浏览器版本命令
<!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> <!--[if IE]> 所有的IE可识别 <![ ...