http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183.
题意不再赘述。
分析:大概和LCS差不多的吧 但是我用LCS转换貌似错了
搜的网上的题解 大概就是 如果(dp[i-1][j-1] dp[i-1][j] dp[i][j-1])转移过来 注意到 如果s[i] == p[j]的情况可以不用+1
#include<bits/stdc++.h> using namespace std; char s[1010],p[1010]; int dp[1010][1010]; int main() { scanf("%s %s",s+1,p+1); int L1=strlen(s+1),L2=strlen(p+1); for(int i=0;i<=L1;i++) dp[i][0] = i; for(int j=0;j<=L2;j++) dp[0][j] =j; for(int i=1;i<=L1;i++) { for(int j=1;j<=L2;j++) { if(s[i] == p[j]) dp[i][j] = dp[i-1][j-1]; else dp[i][j] = dp[i-1][j-1]+1; dp[i][j] = min(dp[i][j],min(dp[i-1][j],dp[i][j-1])+1); } //printf(" "); } printf("%d",dp[L1][L2]); }