51nod 1183 编辑距离

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183.

题意不再赘述。

分析:大概和LCS差不多的吧   但是我用LCS转换貌似错了 

   搜的网上的题解  大概就是 如果(dp[i-1][j-1] dp[i-1][j] dp[i][j-1])转移过来   注意到 如果s[i] == p[j]的情况可以不用+1

#include<bits/stdc++.h>
using namespace std;
char s[1010],p[1010];
int dp[1010][1010];

int main()
{
    scanf("%s %s",s+1,p+1);
    int L1=strlen(s+1),L2=strlen(p+1);
    for(int i=0;i<=L1;i++)
        dp[i][0] = i;
    for(int j=0;j<=L2;j++)
        dp[0][j] =j;
    for(int i=1;i<=L1;i++)
    {
        for(int j=1;j<=L2;j++)
        {
            if(s[i] == p[j])
                dp[i][j] = dp[i-1][j-1];
            else
                dp[i][j] = dp[i-1][j-1]+1;
            dp[i][j] = min(dp[i][j],min(dp[i-1][j],dp[i][j-1])+1);
        }
        //printf("
");
    }
    printf("%d",dp[L1][L2]);
}
原文地址:https://www.cnblogs.com/Draymonder/p/7356148.html