UVA1437 String painter
我们先考虑从一个空白串变成\(B\),这样的话用区间dp,区间dp,设\(f[l][r]\)表示区间\((l,r)\)的最小次数,当\(l==r\)时为\(1\),当\(s[l]==s[r]\)时为\(min(f[l][r-1],f[l+1][r])\),否则枚举断点\(k\),为\(min(f[l][k]+f[k+1][r])\)
然后考虑从\(A\)变成\(B\),设\(dp[i]\)表示\(A\)的前\(i\)个字母变成\(B\)的最小次数,一开始先设成\(f[1][i]\),如果\(A[i]==B[i]\)那么设为\(dp[i-1]\),然后枚举断点\(k\),则\(dp[i]=min\{dp[k]+f[k+1][i]\}\)
//minamoto
#include<bits/stdc++.h>
#define R register
#define inf 0x3f3f3f3f
#define min(x,y) ((x)<(y)?(x):(y))
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=105;
int f[N][N],dp[N],n;char A[N],B[N];
void solve(){
n=strlen(A+1),memset(f,0x3f,sizeof(f)),memset(dp,0x3f,sizeof(dp));
fp(i,0,n)f[i][i]=1;
fp(l,1,n-1)fp(i,1,n-l){
if(B[i]==B[i+l])f[i][i+l]=min(f[i+1][i+l],f[i][i+l-1]);
else fp(k,i,i+l-1)f[i][i+l]=min(f[i][i+l],f[i][k]+f[k+1][i+l]);
}dp[1]=A[1]==B[1]?0:1;
fp(i,2,n){
dp[i]=f[1][i];if(A[i]==B[i])dp[i]=min(dp[i],dp[i-1]);
else fp(j,1,i-1)dp[i]=min(dp[i],dp[j]+f[j+1][i]);
}printf("%d\n",dp[n]);
}
int main(){
// freopen("testdata.in","r",stdin);
while(~scanf("%s%s",A+1,B+1))solve();
return 0;
}
UVA1437 String painter的更多相关文章
- HDOJ 题目2474 String painter(区间DP)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu2476 String painter(区间dp)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2476 Problem Description There are two strings ...
- uva live 4394 String painter 间隔dp
// uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他 ...
- HDU 2476 String painter(区间DP)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU2476 String painter
题意 String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 刷题总结——String painter(hdu2476)
题目: Problem Description There are two strings A and B with equal length. Both strings are made up of ...
- HDU2476 String painter —— 区间DP
题目链接:https://vjudge.net/problem/HDU-2476 String painter Time Limit: 5000/2000 MS (Java/Others) Me ...
- String painter(区间DP)
There are two strings A and B with equal length. Both strings are made up of lower case letters. Now ...
- uva live 4394 String painter 区间dp
// uva live 4394 String painter // // 这一题是训练指南上dp专题的习题,初看之下认为仅仅是稍微复杂了一点 // 就敲阿敲阿敲,两个半小时后,发现例子过了.然而自己 ...
随机推荐
- Atom编辑Markdown文件保存后行尾的空格自动消失的问题解决
Markdown文件的行尾增加两个空格表示一行结束需要换行. 但保存文件后,行尾的空格自动消失,导致不换行. 解决方法: 1.[Edit]->[Preferences]->[Package ...
- Spring Boot使用Feign客户端调用远程服务时出现:timed-out and no fallback available,failed and no fallback available的问题解决
timed-out and no fallback available: 这个错误基本是出现在Hystrix熔断器,熔断器的作用是判断该服务能不能通,如果通了就不管了,调用在指定时间内超时时,就会通过 ...
- ArcEngine读取ShapeFile时,出现乱码的解决方案
ArcEngine读取ShapeFile时,如果用LicenseControl的话,字段中含有汉字时可以正常使用,当使用LicenseInitializer进行初始化时,读取含有汉字的字段时,就会出现 ...
- asp.net core 集成JWT(一)
[什么是JWT] JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. JWT的官网地址:https://jwt.io/ 通俗地来讲,JWT是能代表用户身份的令牌,可以使用JWT ...
- Python第五讲
一.冒泡算法 1.将两个变量的值互换 a1 = 123 a2 = 456 #要想将a1与a2的值进行位置互换需要借助一个中间变量(temp) temp = a1#将a1的值赋值给temp(temp=1 ...
- Behavioral模式之Chain of Responsibility模式
1.意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递改请求,知道有一个对象处理它为止. 2.别名 无 3.动机 考虑一个图形用户界面 ...
- UML视频总结
"RUP 4+1"视图 学习UML我们就必须先了解这"RUP 4+1"视图,它是架构设计的结构标准,例如以下图所看到的. watermark/2/text/aH ...
- WebService(2)-XML系列之用Stax操作Xml
源代码下载:链接: http://pan.baidu.com/s/1ntL1a7R password: rwp1 本文主要讲述:利用Stax处理xml文档 一.读取xml 1.基于光标的查找 核心:X ...
- 【iOS系列】-程序开启后台运行
[iOS系列]-程序开启后台运行 iOS程序是伪后台的运行,可是有时候我们需要让其在后台也要进行一些操作,我们可以让其伪装成音乐的APP,这样就可以让程序后台进行相关操作了,具体做法如下: 1:在Ap ...
- 杭电 1150 moving tables
http://acm.hdu.edu.cn/showproblem.php? pid=1050 Moving Tables Time Limit: 2000/1000 MS (Java/Others) ...