51nod 1183 编辑距离

来源:互联网 发布:伦敦生活 知乎 编辑:程序博客网 时间:2024/06/08 10:12

开始不知道怎么想的想偏了。。。

很简单的三种情况,第一个字符串+1,第二个字符串+1,两个相同的情况

dp不能想太多,想出,这个数怎么由前面的状态转移而成就行了。想的多,要背锅。

#include <iostream>#include<bits/stdc++.h>#define ll long longusing namespace std;char s[2][1500];int dp[1500][1100];int main(){   cin>>s[0];   cin>>s[1];   int len1=strlen(s[0]);   int len2=strlen(s[1]);for(int i=0;i<=len1;i++)dp[i][0]=i;for(int i=0;i<=len2;i++)dp[0][i]=i;for(int i=1;i<=len1;i++)    for(int j=1;j<=len2;j++){    dp[i][j]=min(dp[i-1][j],dp[i][j-1])+1;    dp[i][j]=min(dp[i][j],dp[i-1][j-1]+(s[0][i-1]!=s[1][j-1]?1:0));}    printf("%d\n",dp[len1][len2]);}


原创粉丝点击