看了师兄的思路做出来的~
f(i,j)=f(i-1,j-1)+1 (a==b[j])
f(i,j)=max(f(i-1,j),f(i,j-1)) (a!=b[j])
#include <iostream>
using namespace std;
char X[1005],Y[1005];
int table[1005][1005];
int main()
{
int xlen,ylen,i,j,t;
while(scanf("%s%s",&X,&Y)==2)
{
xlen=strlen(X);
ylen=strlen(Y);
for(i=0,t=0;i<ylen;i++)
if(t || X[0]==Y[i])
{
table[0][i]=1;
t=1;
}
else
table[0][i]=0;
for(i=0,t=0;i<xlen;i++)
if(t || Y[0]==X[i])
{
table[i][0]=1;
t=1;
}
else
table[i][0]=0;
for(i=1;i<xlen;i++)
for(j=1;j<ylen;j++)
if(X[i]==Y[j])
table[i][j]=table[i-1][j-1]+1;
else
table[i][j]=table[i-1][j]>table[i][j-1]?table[i-1][j]:table[i][j-1];
printf("%d/n",table[xlen-1][ylen-1]);
}
return 0;
}