提交时间:2023-11-07 13:44:17

运行 ID: 109224

#include<bits/stdc++.h> using namespace std; #define int long long int msum=0; int n,ba[25]; string a[25]; char f; int pd(int ai,int bi,int al,int bl){ string t; int mt=0; bl=min(al,bl); for(int i=1;i<=bl;i++){ t=a[ai].substr(al-i,i); if(a[bi].find(t)==0) mt=i; else break; } return mt; } void dfs(int ii,int sum,int l){ if(ii==1){ for(int i=1;i<=n;i++){ if(a[i][0]==f){ ba[i]++; dfs(i+1,a[i].size(),i); ba[i]--; } } } else{ bool b=1; int alen=a[l].size(),blen; for(int i=1;i<=n;i++){ if(ba[i]<2){ blen=a[i].size(); int r=pd(l,i,alen,blen); if(r>0){ ba[i]++; dfs(ii+1,sum+blen-r,i); ba[i]--; b=0; } } } if(b){ msum=max(msum,sum); } } } signed main(){ memset(ba,0,sizeof(ba)); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } cin>>f; dfs(1,0,0); cout<<msum; return 0; }