很简单的dp题
#include <bits/stdc++.h>
using namespace std;
const int N = 60;
int T;
int dp[N][N];
char str[N][N];
int main()
{
cin >> T;
while (T -- )
{
int n;
cin >> n;
for (int i = 0; i < n; i ++ )
cin >> str[i] + 1;
int res = 0;
memset(dp, 0, sizeof dp);
for (int i = 0; i < n; i ++ )
{
for (int j = i + 1; j < n; j ++ )
{
// cout << i << ' ' << j << ' ';
memset(dp, 0, sizeof dp);
int lena = strlen(str[i] + 1), lenb = strlen(str[j] + 1);
for (int a = 1; a <= lena; a ++ )
for (int b = 1; b <= lenb; b ++ )
{
if (str[i][a] == str[j][b]) dp[a][b] = max(dp[a][b], dp[a - 1][b - 1] + 1);
res = max(res, dp[a][b]);
}
// cout << dp[lena][lenb] << endl;
}
}
cout << res << endl;
}
}