CodeForces 191A
考虑 dp
dp[i][j]
表示 以i
为开头以 j
为结尾字符串能够满足条件的最大值。
因为要满足 a...b,c....d a == d && b == c
的条件。。
直接
for (int j = 1; j <= 26; j++)
{
if (dp[j][st])
dp[j][ed] = max(dp[j][ed], dp[j][st] + m);
}
dp[st][ed] = max(dp[st][ed], m);
枚举开头进行更新,或者枚举结尾的位置更新也行。。
int dp[100][100];
string s[N];
int main()
{
int n;
cin >> n;
rep(i, n)
{
cin >> s[i];
}
rep(i, n)
{
int m = s[i].size();
int st = s[i][0] - 'a' + 1;
int ed = s[i][m - 1] - 'a' + 1;
for (int j = 1; j <= 26; j++)
{
if (dp[j][st])
dp[j][ed] = max(dp[j][ed], dp[j][st] + m);
}
dp[st][ed] = max(dp[st][ed], m);
}
int ans = 0;
for (int i = 1; i <= 26; i++)
{
ans = max(ans, dp[i][i]);
}
cout << ans << endl;
return 0;
}