[luoguP2758] 编辑距离(DP)

Posted 蒟蒻zht的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[luoguP2758] 编辑距离(DP)相关的知识,希望对你有一定的参考价值。

传送门

 

f[i][j] 表示第一串前 i 个到第二串前 j 个的最小编辑距离

f[i][j] = f[i - 1][j - 1] (s1[i] == s2[j])

f[i][j] = min(f[i - 1][j], f[i][j - 1], f[i - 1][j - 1]) (s1[i] != s2[j])

边界 f[0][j] = j (1 <= j <= m)

   f[i][0] = i (1 <= i <= n)

 

——代码

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 int n, m;
 5 int f[2048][2048];
 6 char s1[2048], s2[2048];
 7 
 8 inline int min(int x, int y)
 9 {
10     return x < y ? x : y;
11 }
12 
13 int main()
14 {
15     int i, j;
16     scanf("%s %s", s1 + 1, s2 + 1);
17     n = strlen(s1 + 1);
18     m = strlen(s2 + 1);
19     for(i = 1; i <= n; i++) f[i][0] = i;
20     for(i = 1; i <= m; i++) f[0][i] = i;
21     for(i = 1; i <= n; i++)
22         for(j = 1; j <= m; j++)
23         {
24             if(s1[i] == s2[j]) f[i][j] = f[i - 1][j - 1];
25             else f[i][j] = min(min(f[i - 1][j], f[i][j - 1]), f[i - 1][j - 1]) + 1;
26         }
27     printf("%d\n", f[n][m]);
28     return 0;
29 }
View Code

 

以上是关于[luoguP2758] 编辑距离(DP)的主要内容,如果未能解决你的问题,请参考以下文章

Luogu-P2758 编辑距离

洛谷 P2758 编辑距离 dp

动态规划--P2758 编辑距离

洛谷——P2758 编辑距离

洛谷 P2758 编辑距离

洛谷 P2758 编辑距离