【00NOIP提高组】单词接龙
#include<bits/stdc++.h> using namespace std; const int N=25; int n,length; int vis[N]; string str[N]; inline int check(string x,string y) { int len=min(x.size(),y.size()); for(int i=1;(x.size()==1)?(i<=len):(i<len);i++) { bool flag=true; for(int j=0;j<i;j++) { if(x[x.size()+j-i]!=y[j]) { flag=false; break; } } if(flag) return i; } return 0; } void dfs(string s,int length_now) { length=max(length,length_now); for(int i=1;i<=n;i++) { if(vis[i]>1) continue; int add=check(s,str[i]); if(add) { vis[i]++; dfs(str[i],length_now+str[i].size()-add); vis[i]--; } } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) cin>>str[i]; cin>>str[n+1]; dfs(str[n+1],1); printf("%d",length); return 0; }