51nod 1183 编辑距离 dp

来源:互联网 发布:acronis linux备份 编辑:程序博客网 时间:2024/05/20 23:34

题目:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183
编辑距离:https://baike.baidu.com/item/%E7%BC%96%E8%BE%91%E8%B7%9D%E7%A6%BB/8010193?fr=aladdin

#include<cstdio>#include<queue>#include<iostream>#include<vector>#include<map>#include<cstring>#include<string>#include<set>#include<stack>#include<algorithm>#define cle(a) memset(a,0,sizeof(a))#define inf(a) memset(a,ox3f,sizeof(a))#define ll long long#define Rep(i,a,n) for(int i=a;i<=n;i++)using namespace std;const int INF = ( 2e9 ) + 2;const int maxn = 1010;int dp[maxn][maxn];int main(){    char s[maxn],t[maxn];    scanf("%s%s",s+1,t+1);    int l1=strlen(s+1);    int l2=strlen(t+1);    int l=max(l1,l2);    for(int i=0;i<=l;i++)    {        dp[0][i]=i;        dp[i][0]=i;         // 当一个串长度为i时,另一个为0,编辑距离为i     }    for(int i=1;i<=l1;i++)    {        for(int j=1;j<=l2;j++)        {            if(s[i]!=t[j])            dp[i][j]=dp[i-1][j-1]+1;            else            dp[i][j]=dp[i-1][j-1];            dp[i][j]=min(min(dp[i-1][j]+1,dp[i][j-1]+1),dp[i][j]);        }    }    printf("%d\n",dp[l1][l2]);}