提交时间:2023-11-04 09:10:57

运行 ID: 108659

#include<bits/stdc++.h> using namespace std; int n,b[25],length,lmax; char ch; string a[25]; int check(int i,int j) { int flag; for(int k=1;k<min(a[i].length(),a[j].length());k++) { flag=1; for(int t=0;t<k;t++) { if(a[i][a[i].length()-k+t]!=a[j][t]) { flag=0; break; } } if(!flag) return k-1; } } bool check_() { for(int i=1;i<=n;i++) if(!b[i]) for(int k=1;k<=n;k++) if(check(i,k)) return false; return true; } void dfs(int step) { if(check_()&&length>lmax) { lmax=length; return; } for(int i=1;i<=n;i++) { if(step==0&&a[i][0]!=ch) continue; for(int j=1;j<=n;j++) { int t=check(i,j); if(!b[i]&&!b[j]&&t) { length+=(a[i].length()+a[j].length()-t); b[i]=b[j]=1; dfs(step+1); b[i]=b[j]=0; length-=(a[i].length()+a[j].length()-t); } } } } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; cin>>ch; dfs(0); cout<<lmax; return 0; }