思路:
设f[i][j]标识a匹配到i位,b匹配到j位
于是很好转移(
#include#include #include using namespace std; char s[2010], ss[2010]; int f[2010][2010]; int main() { scanf("%s", s+1); scanf("%s", ss+1); memset(f, 0x7f, sizeof(f)); f[0][0]=0; for(int i=1; i<=strlen(s+1); i++) f[i][0]=i; for(int i=1; i<=strlen(ss+1); i++) f[0][i]=i; for(int i=1; i<=strlen(s+1); i++) for(int j=1; j<=strlen(ss+1); j++) { if(s[i]==ss[j]) f[i][j]=f[i-1][j-1]; f[i][j]=min(f[i][j], f[i-1][j]+1); f[i][j]=min(f[i][j], f[i-1][j-1]+1); f[i][j]=min(f[i][j], f[i][j-1]+1); } printf("%d", f[strlen(s+1)][strlen(ss+1)]); return 0; }



