给出两个长度小于1000的字符串,有三种操作,插入一个字符,删除一个字符,替换一个字符。

问A变成B所需的最少操作数(即编辑距离)

考虑DP,可以用反证法证明依次从头到尾对A,B进行匹配是不会影响答案的

令dp[i][j]表示A[i]~[lenA]变成B[j]~[lenB]的最优解。

如果把B[j]插入到A[i]前,dp[i][j]=dp[i][j+1]+1

如果删除A[i],dp[i][j]=dp[i+1][j]+1.

如果A[i]==B[j], dp[i][j]=dp[i+1][j+1].

如果A[i]!=B[j], 则用B[j]替换A[i]. dp[i][j]=dp[i+1][j+1]+1.

得出状态转移方程后记搜一下就OK了。

  1. # include <cstdio>
  2. # include <cstring>
  3. # include <cstdlib>
  4. # include <iostream>
  5. # include <vector>
  6. # include <queue>
  7. # include <stack>
  8. # include <map>
  9. # include <set>
  10. # include <cmath>
  11. # include <algorithm>
  12. using namespace std;
  13. # define lowbit(x) ((x)&(-x))
  14. # define pi acos(-1.0)
  15. # define eps 1e-
  16. # define MOD
  17. # define INF
  18. # define mem(a,b) memset(a,b,sizeof(a))
  19. # define FOR(i,a,n) for(int i=a; i<=n; ++i)
  20. # define FO(i,a,n) for(int i=a; i<n; ++i)
  21. # define bug puts("H");
  22. # define lch p<<,l,mid
  23. # define rch p<<|,mid+,r
  24. # define mp make_pair
  25. # define pb push_back
  26. typedef pair<int,int> PII;
  27. typedef vector<int> VI;
  28. # pragma comment(linker, "/STACK:1024000000,1024000000")
  29. typedef long long LL;
  30. int Scan() {
  31. int res=, flag=;
  32. char ch;
  33. if((ch=getchar())=='-') flag=;
  34. else if(ch>=''&&ch<='') res=ch-'';
  35. while((ch=getchar())>=''&&ch<='') res=res*+(ch-'');
  36. return flag?-res:res;
  37. }
  38. void Out(int a) {
  39. if(a<) {putchar('-'); a=-a;}
  40. if(a>=) Out(a/);
  41. putchar(a%+'');
  42. }
  43. const int N=;
  44. //Code begin...
  45.  
  46. int dp[N][N], len1, len2;
  47. char s1[N], s2[N];
  48.  
  49. int dfs(int x, int y)
  50. {
  51. if (~dp[x][y]) return dp[x][y];
  52. if (x==len1&&y==len2) return ;
  53. if (x==len1) return len2-y;
  54. if (y==len2) return len1-x;
  55. int ans=dfs(x+,y)+;
  56. ans=min(ans,dfs(x+,y+)+(s1[x]==s2[y]?:));
  57. ans=min(ans,dfs(x,y+)+);
  58. return dp[x][y]=ans;
  59. }
  60. int main ()
  61. {
  62. while (~scanf("%d%s%d%s",&len1,s1,&len2,s2)) {
  63. mem(dp,-);
  64. printf("%d\n",dfs(,));
  65. }
  66. return ;
  67. }

POJ 3356 AGTC(DP求字符串编辑距离)的更多相关文章

  1. POJ 3356 AGTC(DP-最小编辑距离)

    Description Let x and y be two strings over some finite alphabet A. We would like to transform x int ...

  2. POJ 3356 AGTC(最小编辑距离)

    POJ 3356 AGTC(最小编辑距离) http://poj.org/problem?id=3356 题意: 给出两个字符串x 与 y,当中x的长度为n,y的长度为m,而且m>=n.然后y能 ...

  3. POJ 3356.AGTC

    问题简述: 输入两个序列x和y,分别执行下列三个步骤,将序列x转化为y (1)插入:(2)删除:(3)替换: 要求输出最小操作数. 原题链接:http://poj.org/problem?id=335 ...

  4. poj 3356 AGTC(线性dp)

    题目链接:http://poj.org/problem?id=3356 思路分析:题目为经典的编辑距离问题,其实质为动态规划问题: 编辑距离问题定义:给定一个字符串source,可以对其进行复制,替换 ...

  5. POJ 3356 AGTC(最长公共子)

    AGTC Description Let x and y be two strings over some finite alphabet A. We would like to transform  ...

  6. POJ 3356(最短编辑距离问题)

    POJ - 3356 AGTC Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Desc ...

  7. POJ 3080 Blue Jeans (求最长公共字符串)

    POJ 3080 Blue Jeans (求最长公共字符串) Description The Genographic Project is a research partnership between ...

  8. Poj 2096 (dp求期望 入门)

    / dp求期望的题. 题意:一个软件有s个子系统,会产生n种bug. 某人一天发现一个bug,这个bug属于某种bug,发生在某个子系统中. 求找到所有的n种bug,且每个子系统都找到bug,这样所要 ...

  9. POJ 2096 (dp求期望)

    A - Collecting Bugs Time Limit:10000MS     Memory Limit:64000KB     64bit IO Format:%I64d & %I64 ...

随机推荐

  1. iOS自定义字体及类目

    1:获取字体文件 从各种渠道下载字体文件ttf, 网站或者从别的ipa里扣出来.(以fzltxh.ttf为例) 2:将fzltxh.ttf文件拷贝到工程中 3:在Info.plist中添加项: Fon ...

  2. Delphi中使用Dos窗口输出调试信息

    在项目文件 *.DPR (Project->View Source)  里加上{$APPTYPE   CONSOLE} 然后,在需要输出处加上 Writeln(‘your debug messa ...

  3. mongodb学习(四)CRUD操作

    CRUD操作: 1. 插入操作: 直接使用 insert可执行单个操作,也可以执行批量操作 书上的batchInsert会报错.似乎被废弃了. db.foo.insert({"bar&quo ...

  4. ECSHOP中ajax的调用原理

    ECSHOP中ajax的调用原理 ecshop中ajax的调用原理. 1.首先ecshop是如何定义ajax对象的. ecshop中的ajax对象是在js/transport.js文件中定义的.里面是 ...

  5. sql server mdf碎片级数据库修复,数据库碎片级提取

    sql server mdf碎片级数据库修复,数据库碎片级提取   大家都知道MDF数据库文件一般都比较大,在磁盘中往往被存放到不连续的逻辑簇中,久而久之就形成了文件碎片,当文件被误删除或者格式化后, ...

  6. java 对象比较

    class Book{    private String title ;    private double price ; public Book(String title , double pr ...

  7. Python3基础 使用 in notin 查询一个字符是否指定字典的键或者值

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  8. 五 Android Capabilities讲解

    1.Capabilities介绍 可以看下之前代码里面设置的capabilities DesiredCapabilities capabilities = new DesiredCapabilitie ...

  9. osgearth earth文件规范-符号参考

    osgearth earth文件规范-符号参考 osgEarth用样式表渲染要素和注记. 本文档列出了可在样式表中使用的所有符号属性.不是每个符号是适用于每种情况:这只是一个主列表. 跳转到符号: • ...

  10. 编译安装mysql-server5.6.32手记

    起因: CentOS内置源里面默认安装的Mysql-server太老旧,不支持一些新方法的调用,需要重新安装一个新版本 老版本里面有数据,不想卸载,想保留库和软件本身 机器上没有运行Docker,而且 ...