Maxlen[i,j]表示s1的前i个字符和s2的前j个字符的最长公共子序列的长度
#include<iostream>
#include <memory.h>
#include <algorithm>
#include <string.h>
#include <stdio.h>
#define MaxLen 1005
using namespace std;
char str1[MaxLen];
char str2[MaxLen];
int Maxlen[MaxLen][MaxLen];
int main()
{
while(cin >> str1+1 >> str2+1)
{
int len1 = strlen(str1+1);
int len2 = strlen(str2+1);
for(int i=1;i<=len1;i++)
Maxlen[i][0] = 0;
for(int i=1;i<=len2;i++)
Maxlen[0][i] = 0;
for(int i=1;i<=len1;i++)
for(int j=1;j<=len2;j++)
{
if(str1[i]==str2[j])
Maxlen[i][j] = Maxlen[i-1][j-1] + 1;
else
{
Maxlen[i][j] = max(Maxlen[i-1][j],Maxlen[i][j-1]);
}
}
int m=-1;
for(int i=1;i<=len1;i++)
for(int j=1;j<=len2;j++)
m = max(m,Maxlen[i][j]);
cout<<m<<endl;
}
return 0;
}