题目链接:http://poj.org/problem?id=3356
也是DP中比较经典的问题
dp[i][j]表示第一个串到i位置,和第二个串到j位置的最短编辑距离
dp[i][j]
如果s1[i]==s2[j]
dp[i][j]=MIN(dp[i-1][j-1],dp[i-1][j]+1,dp[i][j-1]);
否则dp[i][j]=MIN(dp[i-1][j-1]+1,dp[i-1][j]+1,dp[i][j-1]);
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
#define maxn 1100
#define MAX(a,b) (a>b?a:b)
#define MIN(a,b) (a<b?a:b)
int dp[maxn][maxn];
int a,b;
char s1[maxn],s2[maxn];
int main(){
int i,j,k;
while(scanf("%d%s",&a,s1+1)!=EOF){
scanf("%d%s",&b,s2+1);
for(i=0;i<=a;i++)
dp[i][0]=i;
for(i=0;i<=b;i++)
dp[0][i]=i;
for(i=1;i<=a;i++)
for(j=1;j<=b;j++){
if(s1[i]==s2[j]) k=dp[i-1][j-1];
else{
k=MIN(dp[i-1][j]+1,dp[i][j-1]+1);
}
dp[i][j]=MIN(k,dp[i-1][j-1]+1);
}
printf("%d\n",dp[a][b]);
}
return 0;
}