例题见9018_1854
其实这个算法也就随便dp一下就好了
状态转移方程就是:
f[i][j]=max{
f[i-1][j-1]+1(c1[i]==c2[j]),
f[i][j-1] , f[i-1][j]
}
#include<iostream> #include<cstdio> #include<cstring> using namespace std; char a[2001],b[2001]; int f[2001][2001],n,m; inline int max(int x,int y){return x>y?x:y;} int main() { while(scanf("%s%s",a,b)!=EOF){ memset(f,0,sizeof(f)); n=strlen(a);m=strlen(b); for(int i=0;i<max(n,m);i++)f[i][0]=f[0][i]=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i-1]==b[j-1])f[i][j]=f[i-1][j-1]+1; else f[i][j]=max(f[i][j-1],f[i-1][j]); printf("%d\n",f[n][m]); } return 0; }
本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。