题目链接: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; }