#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=20;
struct node{
char a,b;
int len;
}s[MAXN];
int ans,n,edge[MAXN][MAXN];
bool vis[MAXN];
void dfs(int now,int sum){
for(int i=1;i<=edge[now][0];++i){
int v=edge[now][i];
if(!vis[v]){
vis[v]=true;
dfs(v,sum+s[v].len);
vis[v]=false;
}
}
ans=max(ans,sum);
return;
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;++i){
string ss;
cin>>ss;
int l=ss.length();
s[i].a=ss[0];
s[i].b=ss[l-1];
s[i].len=l;
}
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(s[i].b==s[j].a){
edge[i][0]++;
edge[i][edge[i][0]]=j;
}
}
}
for(int i=1;i<=n;++i){
memset(vis,0,sizeof(vis));
vis[i]=true;
dfs(i,s[i].len);
}
printf("%lld",ans);
return 0;
}
请问这代码不是O(2n)的吗?为什么过不了n=16的数据?