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 ;
}

最新文章

  1. [译]ZOOKEEPER RECIPES-Locks
  2. occ代码分析
  3. C#基础总结
  4. MongoDB的基础知识
  5. 猿题库 iOS 客户端架构设计
  6. android-数据存储之远程服务器存储
  7. Golang gRPC 示例
  8. not use jquery
  9. php中include包含文件路径查找过程
  10. flexPaper +swftools实现文档在线阅读
  11. 金蝶盘点机条码数据採集器PDA,WIFI已经连接,可是PDA应用程序还是网络初始化不成功?
  12. Perl语言学习笔记 9 正则表达式处理文本
  13. Codeforces Round #269 (Div. 2) A B C
  14. MYSQL 主从服务器配置工作原理
  15. 每次启动懂maven项目都必须关闭javaw.exe进程
  16. JAVA集合1--总体框架
  17. 解决vscode更新后Ext Js插件无法使用问题
  18. Windows 服务器自动重启定位
  19. golang web framework--Martini
  20. 二、存储管理器--SDRAM

热门文章

  1. LA 3720 高速公路(互质判斜率)
  2. 把 b中的字段整合到a上
  3. less文件的运行
  4. JavaScript权威指南--词法结构
  5. Java接受键盘输入
  6. Unity教程之-UGUI一个优化效率小技巧
  7. python异常列表
  8. Log4j详细设置说明
  9. 启动和停止Oracle服务bat脚本
  10. SpringXML方式配置bean的生命周期lifecycle