分析:是一道DFS的简单题,DFS的思想是穷举,那我们就把所有可能的龙都穷举出来,取长度最长的那个,
难点在于字符串匹配,即一个字符串接在另一个字符串后面的代码实现。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char s[50][50];
int n,ans,len=1;
int vis[50];
inline void dfs(int k)
{
ans=max(ans,len);
for(int i=1;i<=n;i++)
{
if(vis[i]<2)
{
for(int j=0;j<strlen(s[k]);j++)
{
if(s[i][0]==s[k][j])
{
int cnt1=0,cnt2=j;
while(s[i][cnt1]==s[k][cnt2]&&cnt2<strlen(s[k])) cnt1++,cnt2++;
if(cnt2==strlen(s[k]))
{
vis[i]++;
len+=strlen(s[i])-cnt1;
dfs(i);
vis[i]--;
len-=strlen(s[i])-cnt1;
}
}
}
}
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
cin>>s[i];
cin>>s[0];
dfs(0);
printf("%d",ans);
return 0;
}
