题目链接:http://www.acmicpc.sdnu.edu.cn/problem/show/1022
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
int panduan[25];
int sum;
int n;
string a[25];
void DFS(string b,int maxn)
{
sum=max(maxn,sum);
for (int i=1;i<=n;i++)
{
if(panduan[i]==2)continue;
int len1=a[i].length();
int len2=b.length();
int len=min(len1,len2)-1;
for (int j=len;j>=1;j--)。//关于字符串首位相接的问题,在字符串专栏有详细题解,在这里就不赘述,这里要减一,因为不能完全相接。
{
if(b.substr(len2-j,j)==a[i].substr(0,j))
{
panduan[i]++;
DFS(a[i],maxn+len1-j); //不要忘记在DFS之后将判断,还有要注意的,maxn跟sum,切记不要搞混,两者谁表示都可以,但一定要表示清楚,他们自己的含义是什么。
panduan[i]--;
}
}
}
}
int main ()
{
char s;
cin >> n;
for (int i=1;i<=n;i++) cin >> a[i];
cin >> s;
sum=0;
for (int i=1;i<=n;i++) //从n个字符串中找到满足条件的点,进行DFS。
{
if(a[i][0]==s)
{
memset(panduan, 0, sizeof(panduan));
panduan[i]++;
DFS(a[i],a[i].length());
}
}
cout << sum << endl;
return 0;
}



京公网安备 11010502036488号