Description

设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:

1、删除一个字符;

2、插入一个字符;

3、将一个字符改为另一个字符;

!皆为小写字母!

Input

第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于2000。

Output

只有一个正整数,为最少字符操作次数。

难得切了一道\(DP\)题.~w~

我们设\(f[i][j]\)代表将A串前\(i\)位,变为B串前\(j\)位的最小操作次数.

首先预处理很明显.

\(f[0][i]=i\),\(f[i][0]=i\)(根据\(DP\)状态应该不是很难理解。

然后,考虑状态转移.会有两种

一.\(A[i]==B[j]\)

直接接受上一状态.

\[f[i][j]=f[i-1][j-1]
\]

二.\(A[i]!=B[j]\)

这时要求操作次数最小,需要对前面的状态取\(min\)

\[f[i][j]=min((f[i-1][j],f[i][j-1]),f[i-1][j-1])+1
\]

最后我们的答案就是\(f[lena][lenb]\)

代码

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #define R register
  5. using namespace std;
  6. char A[2008],B[2008];
  7. int f[2008][2008],lena,lenb;
  8. int main()
  9. {
  10. scanf("%s",A+1);
  11. scanf("%s",B+1);
  12. lena=strlen(A+1),lenb=strlen(B+1);
  13. for(R int i=1;i<=lenb;i++)f[0][i]=i;
  14. for(R int j=1;j<=lena;j++)f[j][0]=j;
  15. for(R int i=1;i<=lena;i++)
  16. {
  17. for(R int j=1;j<=lenb;j++)
  18. {
  19. if(A[i]==B[j])
  20. f[i][j]=f[i-1][j-1];
  21. else f[i][j]=min(min(f[i-1][j],f[i][j-1]),f[i-1][j-1])+1;
  22. }
  23. }
  24. printf("%d",f[lena][lenb]);
  25. }

简单DP【p2758】编辑距离的更多相关文章

  1. 洛谷——P2758 编辑距离

    P2758 编辑距离 题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一 ...

  2. HDU 1087 简单dp,求递增子序列使和最大

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  3. Codeforces Round #260 (Div. 1) A. Boredom (简单dp)

    题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...

  4. codeforces Gym 100500H A. Potion of Immortality 简单DP

    Problem H. ICPC QuestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/a ...

  5. 简单dp --- HDU1248寒冰王座

    题目链接 这道题也是简单dp里面的一种经典类型,递推式就是dp[i] = min(dp[i-150], dp[i-200], dp[i-350]) 代码如下: #include<iostream ...

  6. poj2385 简单DP

    J - 简单dp Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:65536KB     64bit ...

  7. hdu1087 简单DP

    I - 简单dp 例题扩展 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     ...

  8. poj 1157 LITTLE SHOP_简单dp

    题意:给你n种花,m个盆,花盆是有顺序的,每种花只能插一个花盘i,下一种花的只能插i<j的花盘,现在给出价值,求最大价值 简单dp #include <iostream> #incl ...

  9. hdu 2471 简单DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2571 简单dp, dp[n][m] +=(  dp[n-1][m],dp[n][m-1],d[i][k ...

  10. Codeforces 41D Pawn 简单dp

    题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...

随机推荐

  1. AGC016B Colorful Hats(构造)

    题目大意: 给定n和n个数,每个数a[i]代表除了i外序列中颜色不同的数的个数,问能否构造出来这个数列. 比较简单,首先先求出来a数列的最大值Max, 如果有数小于Max-1,那么显然是不存在的 接下 ...

  2. BZOJ2120 数颜色 【带修改莫队】

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MB Submit: 6579  Solved: 2625 [Submit][Status][Discus ...

  3. scrapy 为每个pipeline配置spider

    在settings.py里面配置pipeline,这里的配置的pipeline会作用于所有的spider,我们可以为每一个spider配置不同的pipeline, 设置 Spider 的 custom ...

  4. Installing Jenkins to Centos Docker

    1.Install Docker CE to Centos7 [root@zoo1 ~]# yum install -y yum-utils device-mapper-persistent-data ...

  5. C++ Review

    #include "iostream" #include "iomanip" #include "cstdio" using namespa ...

  6. php中的split函数

    字符串分割函数:split函数 <?php $email='microsoft@exam!ple.com'; $domain = split('\.|@|!',$email);//split分割 ...

  7. BZOJ 4527: K-D-Sequence

    4527: K-D-Sequence Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 163  Solved: 66[Submit][Status][D ...

  8. 汕头市队赛 SRM 06 A 撕书

    A 撕书 SRM 06 背景&&描述 游行寺汀正在杀书.         书总共有n页,每页都可以看作是一个小写英文字母,所以我们可以把书看成长度为n的字符串s.         琉璃 ...

  9. [bzoj1015][JSOI2008]星球大战——并查集+离线处理

    题解 给定一张图,支持删点和询问连通块个数 按操作顺序处理的话要在删除点的同时维护图的形态(即图具体的连边情况),这是几乎不可做的 我们发现,这道题可以先读入操作,把没删的点的边先连上,然后再倒序处理 ...

  10. 利用os、hash模块生成目录下所有文件的md5

    hashlib用于对字符串或者文件进行加密. 使用方法1: hashlib.md5('str').hexdigest() 使用MD5对str进行加密,使用hexdigest(),16进制的方式打印   ...