提交时间:2023-11-04 09:26:28

运行 ID: 108714

#include<iostream> #include<vector> #include<string> #include<stdio.h> using namespace std; const int N = 30, inf = -1e9; int a[N], n, ans = inf, _len = 1; bool b[N]; char sh; string s[N]; vector<int> vec; void f(int x){ if(x == n){ int cnt = _len; if(s[vec[0]][0] == sh) cnt--; for(int i = 0; i < vec.size() - 2; i++){ for(int j = min(s[vec[i]].size(), s[vec[i+1]].size()); j >= 0; j--){ if(s[vec[i]].substr(s[vec[i]].size() - j, j) == s[vec[i+1]].substr(0, j)){ cnt -= j; break; } } } ans = max(cnt, ans); return; } for(int i = 0; i < n; i++){ if(!b[i]){ b[i] = true; a[x] = i; vec.push_back(i); f(x + 1); vec.pop_back(); b[i] = false; } } } int main(){ // freopen("chain.in", "r", stdin); // freopen("chain.out", "w", stdout); cin >> n; for(int i = 0; i < n; i++){ cin >> s[i]; _len += s[i].size(); } cin >> sh; f(0); cout << ans; return 0; }