暴搜!! 暴搜!! 暴搜!!
重要的事情说三遍
#include <bits/stdc++.h>
using namespace std;
const int N = 25;
int n, ans, use[N];
string s, word[N];
void dfs(string s){
int ls = s.size(); //s的length
ans = max(ans, ls); //求出最长的单词接龙
for(int i = 0; i < n; i++){
string w = word[i];
int lw = w.size();
for(int j = 1; j < ls && j < lw; j++){
if(use[i] < 2 && s.substr(ls - j) == w.substr(0, j)){ //如果一个字符串后缀与另一个字符串的前缀一样,并使用次数不超过2次
use[i]++;//增加这个单词的使用次数
dfs(s + w.substr(j));
use[i]--;//恢复现场
break; //跳出
}
}
}
}
int main(){
cin >> n;
for(int i = 0; i < n; i++) cin >> word[i];
cin >> s;
s = " " + s; //加随意一个字符,这样不用特判
dfs(s);
cout << ans - 1; //输出最长的单词接龙,要减去空格的1
}
标签:use,洛谷,substr,int,题解,单词,++,ls,P1019
From: https://www.cnblogs.com/wayneoi/p/18348924