#include<iostream> //.size() 和length() 不能存在一个函数中 不然会报错
#include<string.h>
#include<string>
using namespace std;
string a[22],start;
int ans=-1,book[22],n;
int judge(string s,string d){
int i;
if(s.size()==1){
if(s[0]==d[0]) return d.size();
return 0;
}
for(int i=1;i<=s.size()-1;i++){
string tem1=s.substr(s.size()-i);//第i+1个单词 到最后一个单词
string tem2=d.substr(0,i);//从第一个单词到 i-1 个单词 前i个单词
if(tem1==tem2) return d.size()-i;
}
return 0;
}
void dfs(string s,int now){
if(now!=0&&now>ans) ans=now;
int i;
for(i=1;i<=n;i++){
if(book[i]<=1){
int temp=judge(s,a[i]);//重合之后需要添加的单词长度
if(temp){
book[i]++;
dfs(a[i],now+temp);
book[i]--;
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>start;
dfs(start,0);
cout<<ans<<endl;
}
luogu P1019 单词接龙 【dfs】
最新推荐文章于 2022-11-14 21:27:30 发布