传送门
https://www.luogu.com.cn/problem/P1019
一道远古的NOIP,数据较水,直接上代码
// Problem:
// P1019 [NOIP2000 提高组] 单词接龙
//
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1019
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include<iostream>
using namespace std;
const int N=22;
int ans=0;
int n;
string a[N];//n个字符串
int used[N];//记录使用过几次(有规定最多用两次)
void dfs(string s){
int ls=s.size();//记录长度
ans=max(ans,ls);//更新最大值
for(int i=1;i<=n;++i){
int lw=a[i].size();//记录长度
for(int j=1;j<ls&&j<lw;++j){//控制j的大小,让某一个字符串不能被完全重合
if(s.substr(ls-j)==a[i].substr(0,j)&&used[i]<2){//保证两次一下,且有重合部分
used[i]++;
dfs(s+a[i].substr(j));//substr只有一个参数时,从索引位置开始
used[i]--;
break;//直接跳出,因为最短重合,最后就越长
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;++i) cin>>a[i];
string start;cin>>start;start=' '+start;
//前面加一个,因为单词一定长度一定大于1,防止dfs判断中被卡出去
dfs(start);
cout<<ans-1<<endl;//记着要把最前面那个空格减掉
return 0;
}
这篇文章介绍了解决NOIP2000提高组中的一个单词接龙问题的C++代码,使用深度优先搜索策略,找出最长的可以连接的单词序列。
7393

被折叠的 条评论
为什么被折叠?



