HDU 2476 String painter (区间DP)
题意:给出两个串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)相关推荐
- HDU-2476 String painter 区间DP
题意:给你一个长度相等的A串和B串,每次可以把一个连续的区间刷成一个字母,问从A串到B串的最少操作数. 解法:虽然这类题一看到就知道是区间DP,但是之前只做过类似从空串变成某个串的题目,所以没想到怎么 ...
- LA 4394 String painter 区间DP -
题目地址:http://vjudge.net/problem/UVALive-4394 很明显的区间DP 区间DP的套路就是 d[i][j]的在区间 (i,j) 刷的次数 转移也一般是 d[i][j] ...
- uva live 4394 String painter 间隔dp
// uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他 ...
- HDU 5115 Dire Wolf 区间dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...
- HDU 5693 D Game 区间dp
D Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 Description 众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它 ...
- NYOJ 1067 Compress String(区间dp)
Compress String 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 One day,a beautiful girl ask LYH to help her ...
- [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 ...
- hdu_2476_String painter(区间DP)
题目链接:hdu_2476_String painter 题意: 有a,b两字符串,现在你有一个刷子,每次可以任选一个区间,使这个区间变成你想要的字符,现在让你将a变成b,问最少刷多少次 题解: 考虑 ...
- HDU 5115 Dire Wolf (区间DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5115 题意:很多狼排成一排,每只狼有一个攻击值a[i]和附加攻击值b[i].当你消灭一只狼时,你会受到 ...
最新文章
- app如何打开了request url_手机日历app内如何打开节日提醒功能?支持提前提醒节日的云便签...
- Ethernet/IP 学习笔记六
- 微众WeCross 跨链平台(8)TTM可信事务机制
- 为什么我要放弃javaScript数据结构与算法(第二章)—— 数组
- 关于Notes更改internet密码所需的缓存时间
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写...
- python开发中遇到的难题_初学者在Python开发中常见的问题(上)
- PHP能在Mac上运行吗,PHP Composer无法在Mac上运行
- cad插件加载bplot成功用不了_新手入门,学习CAD必须掌握,教你使用标注命令,绘图效率翻一倍...
- HDU-1520 Anniversary party(树形DP)
- Web后端学习笔记 Flask(6)数据库
- Delphi通过管道执行外部命令行程序(cmd)并获取返回结果
- 野指针 悬垂指针 迷途指针
- windows server 2008 NLB 集群
- pyinstaller 32位 64位的问题
- MATLAB安装破解教程(内涵所需文件)
- List<实体>转json
- CDN是什么意思 CDN加速服务有什么功能和作用?
- 无限乱斗连接服务器失败,LOL新版无限乱斗模式服务器挤爆怎么办 客户端哪些功能被限制...
- 海尔简爱S15电脑使用U盘来重新安装Win10系统教学
热门文章
- python display update用不了能用filp_疯狂的Pygame——使用python写游戏(yuyu版)——基础讲解部分——第一章...
- netty依赖_高性能:《一遍文章带你看懂 Netty世界》
- 【docker】修改docker容器配置,设置/修改端口映射
- 【若依(ruoyi)】自定义layer
- 【css】文字垂直居中
- Eclipse 打开文件出现乱码情况总结
- ie导出excel是html文件路径,导出HTML到Excel中的IE11 - “拒绝访问”
- java框架ssm整合_SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
- activty在哪个栈里面_第二篇Activity:2、任务和返回堆栈(Tasks and Back Stack)之基本介绍...
- mysql路由器配置文件_如何安装并配置mysql 5.7.13解压缩版?