题目地址:http://121.249.217.158/JudgeOnline/problem.php?id=1062
转移方程的参考地址:http://blog.csdn.net/kongying168/article/details/6909959
注:此题在挑战编程上也有。
源代码:
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
char s1[1005];
char s2[1005];
short int a[1005][1005];
short int f[1005][1005];
int main()
{
int t;
int i,j;
cin>>t;
while(t--)
{
cin>>s1;
cin>>s2;
int len1=strlen(s1);
int len2=strlen(s2);
for(i=1;i<=len1;i++)
for(j=1;j<=len2;j++)
if(s1[i-1]==s2[j-1]) f[i][j]=0;
else f[i][j]=1;
a[0][0]=0;
for(i=1;i<=max(len1,len2);i++)
{
a[i][0]=a[i-1][0]+1;
a[0][i]=a[0][i-1]+1;
}
for(i=1;i<=len1;i++)
for(j=1;j<=len2;j++)
a[i][j]=min(a[i-1][j]+1,min(a[i][j-1]+1,a[i-1][j-1]+f[i][j]));
cout<<a[len1][len2]<<endl;
}
return 0;
}