#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<functional>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = 5010;
const int mini = 250;
char X[maxn], Y[maxn];
int dp[mini][mini];
int main() {
int n, m;
while (scanf("%s%s", X, Y)==2) {
int n1 = strlen(X), n2 = strlen(Y);
memset(dp, 0, sizeof(dp));
for(int i=1;i<=n1;++i)
for (int j = 1; j <= n2; ++j)
{
if (X[i - 1] == Y[j - 1])dp[i][j] = (i==0||j==0)?1:dp[i - 1][j - 1] + 1;
else dp[i][j] = max(i==0?1:dp[i - 1][j], j==0?1:dp[i][j - 1]);
}
printf("%d\n", dp[n1][n2]);
}
}
对比了几个ac代码,思路没有明显的错误,输出是正确的