看上去挺不错的,但是实际上样例都过不去。。。
#include <bits/stdc++.h>
using namespace std;
typedef long long lli;
typedef pair<int, int> pii;
#define m_p make_pair
#define INF 2147483647
#define INFL 9223372036854775807LL
int n;
string words[30];
int link[30][30];
int use[30];
int dfs(int i, int len) {
if (use[i] == 2) return len;
use[i]++;
int ret = 0;
for (int j = 0; j < n; j++)
if (link[i][j])
ret = max(ret, dfs(j, words[i].size() + words[j].size() - link[i][j]));
use[i]--;
return ret;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> n;
for (int i = 0; i < n; i++) cin >> words[i];
char start;
cin >> start;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
for (int k = 0; k < min(words[i].size(), words[j].size()) - 1; k++)
if (words[i].substr(words[i].size() - k - 1) == words[j].substr(0, k + 1)) {
link[i][j] = k + 1;
break;
}
int ans = 0;
for (int i = 0; i < n; i++)
if (words[i][0] == start)
ans = max(ans, dfs(i, 0));
cout << ans << endl;
}