感觉这里最烦人的是字符串从0开始存,所以应该注意位置与下标的区别
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 510;
int main()
{
char x[N], y[N];
int len1, len2;
int len[N][N];
while(~scanf("%s%s", x, y))
{
len1 = strlen(x);
len2 = strlen(y);
memset(len, 0, sizeof(len));
for(int i = 1; i <= len1; i++)
{
for(int j = 1; j <= len2; j++)
{
if(x[i-1] == y[j-1])
len[i][j] = len[i-1][j-1] + 1;
else
len[i][j] = max(len[i][j-1], len[i-1][j]);
}
}
int MAX = 0;
for(int i = 1; i <= len1; i++)
for(int j = 1; j <= len2; j++)
if(len[i][j] > MAX)
MAX = len[i][j];
printf("%d\n", MAX);
}
return 0;
}