rt 样例输出是1
CODE
写了一些注释理解
#include<bits/stdc++.h>
using namespace std;
int n;
string a[25];
int vis[25];//记录次数
int ans;
//函数功能:获取最长重叠长度
int init(string s1,string s2){
for(int i=1;i<min(s1.size(),s2.size());i++){
bool flag=true;
for(int j=0;j<n;j++){
if(s1[s1.size()-i+j]!=s2[j]) flag=false;
if(flag) return i;
}
}
return 0;
}
//搜索遍历
void dfs(string s,int len){//s代表当前字符串,len代表s的长度
ans=max(ans,len);//更新最大值
for(int i=0;i<n;i++){//遍历字符串
if(vis[i]>=2) continue;//如果超过两遍就跳过
int z=init(a[i],s);//获取重叠子串长度
if(z){//如果有重叠就继续搜索
vis[i]++;//使用次数+1
dfs(a[i],len+a[i].size()-z);
vis[i]--;//回溯
}
}
}
int main(){
cin>>n;
for(int i=0;i<=n;i++){
cin>>a[i];
}
dfs(" "+a[n],1);
cout<<ans;
return 0;
}