洛谷 P2758 编辑距离

题目传送门

解题思路:

f[i][j]表示A[1~i]全部转化为B[1~j]的最少次数,如果A[i]==B[j],那么f[i][j]=f[i-1][j-1].

如果不一样,那么f[i][j] = min(f[i-1][j],f[i-1][j-1],f[i][j-1]) + 1.

不要忘了初始化.

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 
 4 using namespace std;
 5 
 6 string l1,l; 
 7 int f[2001][2001];
 8 
 9 inline int min(int a,int b) {
10     if(a > b) return b;
11     return a;
12 }
13 
14 int main() {
15     cin >> l >> l1;
16     for(int i = 1;i <= l.length(); i++) f[i][0] = i;
17     for(int i = 1;i <= l1.length(); i++) f[0][i] = i;
18     for(int i = 1;i <= l.length(); i++)
19         for(int j = 1;j <= l1.length(); j++)
20             if(l[i-1] == l1[j-1])
21                 f[i][j] = f[i-1][j-1];
22             else
23                 f[i][j] = min(f[i-1][j],min(f[i-1][j-1],f[i][j-1])) + 1;
24     printf("%d",f[l.length()][l1.length()]);
25     return 0;
26 }

猜你喜欢

转载自www.cnblogs.com/lipeiyi520/p/12339764.html
今日推荐