http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1699
#include <stdio.h>
#include <string.h>
int min(int a,int b){return a>b?b:a;}
int lcs(char a[],char b[],int n,int m)
{
//printf("%s %s %d %d\n",a,b,n,m);
int d[101][101];
memset(d,0,sizeof(d));
for(int i=0;i<=n;++i)d[i][0]=i;
for(int j=0;j<=m;++j)d[0][j]=j;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
d[i][j]=d[i-1][j-1]+((a[i-1]==b[j-1])?0:1);
d[i][j]=min(d[i][j],d[i-1][j]+1);
d[i][j]=min(d[i][j],d[i][j-1]+1);
}
/*printf("----------------\n");
for(int i=0;i<=n;++i)
{
for(int j=0;j<=m;++j)
{
printf("%d ",d[i][j]);
}
printf("\n");
}*/
return d[n][m];
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
char a[101];
char b[101];
while(n--)
{
scanf("%s",a);
scanf("%s",b);
//printf("%s %s\n",a,b);
printf("%d\n",lcs(a,b,strlen(a),strlen(b)));
}
}
return 0;
}