不知道为什么错了。求助大佬! 代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int ans=-0x3f3f3f3f;
const int maxn=25;
string x[maxn];
int b[maxn];
int h[maxn][maxn];
int check(int i,int j){
if(x[i].size()>=x[j].size()){
if(x[i].substr(x[i].size()-x[j].size(),x[j].size())==x[j]){
return 0;
}
}else{
if(x[j].substr(x[j].size()-x[i].size(),x[i].size())==x[i]){
return 0;
}
}
for(int k=1;k<min(x[i].size(),x[j].size());k++){
if(x[i].substr(x[i].size()-k,k)==x[j].substr(0,k)){
return k;
}
}
//if(i==1&&j==2) cout<<1<<endl;
return 0;
}
void dfs(int k,int sum,string str){
if(sum>ans){
//cout<<str<<endl;
ans=sum;
}
for(int i=1;i<=n;i++){
if(b[i]&&h[k][i]>0){
b[i]--;
dfs(i,sum+x[i].size()-h[k][i],str.substr(str.size()-1-h[k][i],h[k][i])+x[i]);
b[i]++;
}
}
}
int main(){
cin>>n;
char z;
for(int i=1;i<=n;i++){
cin>>x[i];
}
cin>>z;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j) continue;
h[i][j]=check(i,j);
}
}
/*for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<h[i][j]<<" ";
}
cout<<endl;
}*/
for(int i=1;i<=n;i++){
if(x[i][0]!=z) continue;
for(int i=1;i<=n;i++){
b[i]=2;
}
b[i]--;
dfs(i,x[i].size(),x[i]);
}
cout<<ans<<endl;
return 0;
}