题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b

思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数。

再考虑把a变成b的次数 ans[i]:a从(0,i)变成b(0,i)所需的最小次数

初始化ans[i]=dp[0][i]

如果a[i]==b[i],则ans[i]=ans[i-1];

由小区间更新到大区间

 1 //#pragma comment(linker, "/STACK:167772160")//手动扩栈~~~~hdu 用c++交
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <iostream>
 6 #include <queue>
 7 #include <stack>
 8 #include <cmath>
 9 #include <set>
10 #include <algorithm>
11 #include <vector>
12 #include <map>
13 // #include<malloc.h>
14 using namespace std;
15 #define clc(a,b) memset(a,b,sizeof(a))
16 #define LL long long
17 const int inf = 0x3f3f3f3f;
18 const double eps = 1e-5;
19 // const double pi = acos(-1);
20 const LL MOD = 9901;
21 const int N = 110;
22
23 // inline int r(){
24 //     int x=0,f=1;char ch=getchar();
25 //     while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
26 //     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
27 //     return x*f;
28 // }
29 char a[N],b[N];
30 int dp[N][N];
31 int ans[N];
32
33 int main(){
34     while(~scanf("%s%s",a,b)){
35         int n=strlen(a);
36         clc(dp,0);
37         for(int i=0;i<n;i++){
38             for(int j=i;j<n;j++){
39                 dp[i][j]=j-i+1;
40             }
41         }
42
43         for(int len=0;len<n;len++){
44             for(int i=0;i<n&&i+len<n;i++){
45                 int j=i+len;
46                 dp[i][j]=dp[i+1][j]+1;
47                 for(int k=i+1;k<=j;k++){
48                     if(b[i]==b[k])
49                     dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]);
50                 }
51             }
52         }
53
54         if(a[0]==b[0]) {
55             ans[0]=0;
56         }
57         else
58             ans[0]=1;
59         for(int i=1;i<n;i++){
60             ans[i]=dp[0][i];
61             if(a[i]==b[i]){
62                 ans[i]=ans[i-1];
63             }
64             else{
65                 for(int k=0;k<i;k++){
66                     ans[i]=min(ans[i],ans[k]+dp[k+1][i]);
67                 }
68             }
69         }
70         printf("%d\n",ans[n-1]);
71     }
72     return 0;
73 }

转载于:https://www.cnblogs.com/ITUPC/p/5506429.html

HDU 2476 String painter (区间DP)相关推荐

  1. HDU-2476 String painter 区间DP

    题意:给你一个长度相等的A串和B串,每次可以把一个连续的区间刷成一个字母,问从A串到B串的最少操作数. 解法:虽然这类题一看到就知道是区间DP,但是之前只做过类似从空串变成某个串的题目,所以没想到怎么 ...

  2. LA 4394 String painter 区间DP -

    题目地址:http://vjudge.net/problem/UVALive-4394 很明显的区间DP 区间DP的套路就是 d[i][j]的在区间 (i,j) 刷的次数 转移也一般是 d[i][j] ...

  3. uva live 4394 String painter 间隔dp

    // uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他 ...

  4. HDU 5115 Dire Wolf 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...

  5. HDU 5693 D Game 区间dp

    D Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 Description 众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它 ...

  6. NYOJ 1067 Compress String(区间dp)

    Compress String 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 One day,a beautiful girl ask LYH to help her ...

  7. [CF1107E]Vasya and Binary String【区间DP】

    题目描述 Vasya has a string s of length n consisting only of digits 0 and 1. Also he has an array a of l ...

  8. hdu_2476_String painter(区间DP)

    题目链接:hdu_2476_String painter 题意: 有a,b两字符串,现在你有一个刷子,每次可以任选一个区间,使这个区间变成你想要的字符,现在让你将a变成b,问最少刷多少次 题解: 考虑 ...

  9. HDU 5115 Dire Wolf (区间DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5115 题意:很多狼排成一排,每只狼有一个攻击值a[i]和附加攻击值b[i].当你消灭一只狼时,你会受到 ...

最新文章

  1. app如何打开了request url_手机日历app内如何打开节日提醒功能?支持提前提醒节日的云便签...
  2. Ethernet/IP 学习笔记六
  3. 微众WeCross 跨链平台(8)TTM可信事务机制
  4. 为什么我要放弃javaScript数据结构与算法(第二章)—— 数组
  5. 关于Notes更改internet密码所需的缓存时间
  6. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写...
  7. python开发中遇到的难题_初学者在Python开发中常见的问题(上)
  8. PHP能在Mac上运行吗,PHP Composer无法在Mac上运行
  9. cad插件加载bplot成功用不了_新手入门,学习CAD必须掌握,教你使用标注命令,绘图效率翻一倍...
  10. HDU-1520 Anniversary party(树形DP)
  11. Web后端学习笔记 Flask(6)数据库
  12. Delphi通过管道执行外部命令行程序(cmd)并获取返回结果
  13. 野指针   悬垂指针   迷途指针
  14. windows server 2008 NLB 集群
  15. pyinstaller 32位 64位的问题
  16. MATLAB安装破解教程(内涵所需文件)
  17. List<实体>转json
  18. CDN是什么意思 CDN加速服务有什么功能和作用?
  19. 无限乱斗连接服务器失败,LOL新版无限乱斗模式服务器挤爆怎么办 客户端哪些功能被限制...
  20. 海尔简爱S15电脑使用U盘来重新安装Win10系统教学

热门文章

  1. python display update用不了能用filp_疯狂的Pygame——使用python写游戏(yuyu版)——基础讲解部分——第一章...
  2. netty依赖_高性能:《一遍文章带你看懂 Netty世界》
  3. 【docker】修改docker容器配置,设置/修改端口映射
  4. 【若依(ruoyi)】自定义layer
  5. 【css】文字垂直居中
  6. Eclipse 打开文件出现乱码情况总结
  7. ie导出excel是html文件路径,导出HTML到Excel中的IE11 - “拒绝访问”
  8. java框架ssm整合_SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
  9. activty在哪个栈里面_第二篇Activity:2、任务和返回堆栈(Tasks and Back Stack)之基本介绍...
  10. mysql路由器配置文件_如何安装并配置mysql 5.7.13解压缩版?