#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<functional>
#include<algorithm>
#include<cstring>
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("%d%d",&n,&m)==2){
int max_ = 0;
memset(dp, 0, sizeof(dp));
scanf("%s", X); scanf("%s", Y);
for(int i=1;i<=n;++i)
for (int j = 1; j <= m; ++j)
{
if (X[i - 1] == Y[j - 1])dp[i][j] = (i == 0 || j == 0) ? 1 : dp[i - 1][j - 1] + 2;
else dp[i][j] = max(0, max(dp[i - 1][j], dp[i][j - 1]) - 1);
max_ = max(max_, dp[i][j]);
}
printf("%d\n", max_);
}
}
不太明白,是哪里出了问题,整体思路看上去没啥问题呀?