【链接】http://hihocoder.com/problemset/problem/1554


【题意】


中文题

【题解】


DP;
设f[i][j][k]表示前i个字符,第一个串已经得到了前j个字符,第二个串已经得到了前k个字符的最少需要字符串长度.
如果想坚持f[i-1][j][k]的[j][k]状态的话,就必须在第i个字符继续坚持,也即再加上一个字符.
或者你想重新开始,所以每次新的f[i]中f[i][0][0] = 0,其余f[i]=INF;
或者可以和第一个字符串匹配到,则从f[i-1][j][k]变为f[i][jj+1][k],或者是f[i][j][k+1]...

【错的次数】


3

【反思】


一开始写的二分+贪心。。然而完全是瞎猜的。

【代码】

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define lson l,m,rt<<1
  4. #define rson m+1,r,rt<<1|1
  5. #define LL long long
  6. #define rep1(i,a,b) for (int i = a;i <= b;i++)
  7. #define rep2(i,a,b) for (int i = a;i >= b;i--)
  8. #define mp make_pair
  9. #define pb push_back
  10. #define fi first
  11. #define se second
  12. #define ms(x,y) memset(x,y,sizeof x)
  13. #define ri(x) scanf("%d",&x)
  14. #define rl(x) scanf("%lld",&x)
  15. #define rs(x) scanf("%s",x+1)
  16. #define oi(x) printf("%d",x)
  17. #define ol(x) printf("%lld",x)
  18. #define oc putchar(' ')
  19. #define os(x) printf(x)
  20. #define all(x) x.begin(),x.end()
  21. #define Open() freopen("F:\\rush.txt","r",stdin)
  22. #define Close() ios::sync_with_stdio(0)
  23.  
  24. typedef pair<int,int> pii;
  25. typedef pair<LL,LL> pll;
  26.  
  27. const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
  28. const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
  29. const double pi = acos(-1.0);
  30. const int N1 = 100;
  31. const int N2 = 3000;
  32. const int INF = 0x3f3f3f3f;
  33.  
  34. char a[N1+10],b[N1+10],s[N2+10];
  35. int lena,lenb,f[2][N1+10][N1+10];
  36.  
  37. int main(){
  38.     //Open();
  39.     //Close();
  40.     rs(a);
  41.     rs(b);
  42.     rs(s);
  43.     lena = strlen(a+1),lenb = strlen(b+1);
  44.     int n = strlen(s+1);
  45.     ms(f[0],INF);
  46.     f[0][0][0] = 0;
  47.     int ans = -1;
  48.     rep1(i,1,n){
  49.         int now = i&1,pre = now^1;
  50.         ms(f[now],INF);
  51.         f[now][0][0] = 0;
  52.         rep1(j,0,lena)
  53.             rep1(k,0,lenb)
  54.                 if (f[pre][j][k]<INF){
  55.                     f[now][j][k] = min(f[pre][j][k] + 1,
  56.                                        f[now][j][k]);
  57.                     if (s[i] == a[j+1]){
  58.                         f[now][j+1][k] = min(f[now][j+1][k],
  59.                                             f[pre][j][k]+1);
  60.                     }
  61.                     if (s[i] == b[k+1]){
  62.                         f[now][j][k+1] = min(f[now][j][k+1],
  63.                                             f[pre][j][k]+1);
  64.                     }
  65.                 }
  66.         int tans = f[now][lena][lenb];
  67.         if (tans >= INF) continue;
  68.         if (ans==-1 || tans < ans){
  69.             ans = tans;
  70.         }
  71.     }
  72.     oi(ans);puts("");
  73.     return 0;
  74. }

【hihocoder 1554】最短的 Nore0061的更多相关文章

  1. hihocoder 1931 最短管道距离

    描述 在一张2D地图上有N座城市,坐标依次是(X1, Y1), (X2, Y2), ... (XN, YN). 现在H国要修建一条平行于X轴的天然气主管道.这条管道非常长,可以认为是一条平行于X轴的直 ...

  2. hihocoder 1829 - 压缩字符串 - [状压+暴力枚举][2018ICPC北京网络预赛B题]

    题目链接:https://hihocoder.com/problemset/problem/1829 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Lara Croft, ...

  3. hihocoder 1485----hiho字符串

    hihocoder 1485:hiho字符串 描述 如果一个字符串恰好包含2个'h'.1个'i'和1个'o',我们就称这个字符串是hiho字符串. 例如"oihateher".&q ...

  4. hihoCoder #1320 : 压缩字符串 区间dp

    /** 题目:hihoCoder #1320 : 压缩字符串 链接:https://hihocoder.com/problemset/problem/1320 描述 小Hi希望压缩一个只包含大写字母' ...

  5. hihocoder 后缀自动机专题

    一.后缀自动机基本概念的理解 1.首先后缀自动机的状态是由子串的endpos来决定的 子串的endpos是指一个子串可以在原字符串的哪些位置进行匹配, endpos构成的不同集合划分成不同的状态 关于 ...

  6. 【hihocoder 1473】小Ho的强迫症

    [题目链接]:http://hihocoder.com/problemset/problem/1473 [题意] [题解] 假定初始为在在0位置(相对它左边那条线); 则考虑; 多少步之后,人又能这到 ...

  7. 北京2018网络赛 hihocoder#1828 : Saving Tang Monk II (BFS + DP +多开一维)

    hihocoder 1828 :https://hihocoder.com/problemset/problem/1828 学习参考:https://www.cnblogs.com/tobyw/p/9 ...

  8. [LeetCode] Minimum Unique Word Abbreviation 最短的独一无二的单词缩写

    A string such as "word" contains the following abbreviations: ["word", "1or ...

  9. [LeetCode] Shortest Word Distance III 最短单词距离之三

    This is a follow up of Shortest Word Distance. The only difference is now word1 could be the same as ...

随机推荐

  1. Concurrent - 多线程

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11426916.html Java中有几种方法可以实现一个线程? 继承Thread类(不支持多继承) 实 ...

  2. 小鱼易连 for mac如何使用?小鱼易连 mac版使用教程

    小鱼易连 for mac如何使用?小鱼易连 mac版是参加远程会议人士的首选,高效极致,简单流畅,视频流畅,语音清晰,无需专用网络的功能深受用户的喜欢,它提供的文件和电脑的共享,让你的会议更加高效.下 ...

  3. &与&&、|与||的区别

    &和&& 相同之处: &和&&都表示:符号两端必须同时为真,最后的结果才为真:其中一端为假,则最后的结果为假 不同之处: &:左端为假,还需要继 ...

  4. bind-dns服务器搭建

    环境:主服务器上IP为192.168.159.30 安装相关包bind dns服务器  bind-utils提供nslookup dig等命令 yum -y install bind bind-uti ...

  5. tomcat7以下线程控制

    web server允许的最大线程连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右. 1.编辑tomcat安装目录下的conf目录下的server. ...

  6. SQL语句映射文件(2)增删改查、参数、缓存

    2.2 select 一个select 元素非常简单.例如: <!-- 查询学生,根据id --> <select id="getStudent" paramet ...

  7. TIOBE 编程语言排行榜是什么,它是如何计算编程语言排行的?

    做为一名程序员,都比较关注其使用编程语言的热度,一方面编程语言的热度决定了它拥有多大的市场,另一方面也关系到行业内程序员选择机会有多大. 我们总听说某个编程语言排名第一,那么这些数据到底准不准确呢? ...

  8. 通过angular.js实现MVC的基本步骤

    通过ng实现MVC的基本步骤: ①创建模块 var app = angular.module('模块名字',['依赖模块1','依赖模块2']) ②调用模块 ngApp--> ng-app=&q ...

  9. Prometheus 详解

    Prometheus 章节 1.Prometheus 简介 2.Prometheus 安装与配置 3.Exporter 4.Pushgateway 5.本地存储和远程存储 6.高可用方案 7.报警插件 ...

  10. vue事件修饰符(once:prev:stop)

    vue事件修饰符(once:prev:stop) stop修饰符  效果如下: 当你鼠标在这个div里的时候,x与y的值:会随着鼠标的变化而变化.但是当鼠标放在stopMoving的时候,x与y的值是 ...