Codevs 1018 单词接龙
2017-07-19 11:10
302 查看
1018 单词接龙
2000年NOIP全国联赛普及组NOIP全国联赛提高组时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题解
查看运行结果
题目描述 Description
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相连。
输入描述 Input Description
输入的第一行为一个单独的整数n(n<=20)表示单词数,以下n行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在.
输出描述 Output Description
只需输出以此字母开头的最长的“龙”的长度
样例输入 Sample Input
5
at
touch
cheat
choose
tact
a
样例输出 Sample Output
23
数据范围及提示 Data Size & Hint
(连成的“龙”为atoucheatactactouchoose)
以后不要用time变量,撞关键字
/* 不知道为什么枚举重合的长度的时候去掉break就A了 把字符串从前面存储一遍,再从后面存储一遍,打包放到结构体里 然后就是深搜,也没怎么剪枝,可能数据太弱 题目没说字符串的最大长度是多少,我就直接用的string */ #include<iostream> #include<cstdio> #include<cstring> #include<map> using namespace std; int n,tim[30],ans; string start; struct node{ int len; map<int,string>h; map<int,string>t; string c; }s[30]; void dfs(int pos,int l){ ans=max(ans,l); if(pos==0){ for(int i=1;i<=n;i++) if(s[i].h[1]==s[0].h[1]){ tim[i]++; dfs(i,s[i].len); tim[i]--; } return; } if(tim[pos]>2)return; for(int i=1;i<=n;i++){ if(tim[i]<2){ for(int j=s[pos].len-1;j>=1;j--){//枚举重合的长度 if(j>=s[i].len)continue; if(s[pos].t[j]==s[i].h[j]){ tim[i]++; dfs(i,l+s[i].len-j); tim[i]--; } } } } } int main(){ scanf("%d",&n); string c; for(int i=1;i<=n;i++){ cin>>s[i].c; s[i].len=s[i].c.length(); string Head; for(int j=0;j<s[i].len;j++){ Head+=s[i].c[j]; s[i].h[j+1]=Head; } string Tail; for(int j=s[i].len-1,k=1;j>=0;j--,k++){ Tail+=s[i].c[j]; string T; int L=Tail.length(); for(int f=L-1;f>=0;f--) T+=Tail[f]; s[i].t[k]=T; } } cin>>s[0].c; string Head;Head+=s[0].c[0]; s[0].h[1]=Head; dfs(0,0); printf("%d",ans); }
相关文章推荐
- 深度优先搜索 之 CODE[VS] 1018 单词接龙 2000年NOIP全国联赛普及组NOIP全国联赛提高组
- codevs 1018 单词接龙
- CODE[VS]1018 单词接龙
- 单词接龙(codevs 1018)
- {CODEVS} 1018 单词接龙(DFS)
- Codevs 1018 单词接龙 (DFS)
- codevs1018 单词接龙(DFS)
- codevs 1018 [noip 2000 提高] 单词接龙
- codevs1018 单词接龙(DFS)
- 单词接龙codevs1018(noip2000)
- CODEVS 1018 单词接龙(DFS)
- 【DFS】CODE[VS] 1018&&NOIP2000提高组T3 单词接龙 (日常刷题???)
- CODE[VS] 1018 单词接龙
- CODE[VS] 1018 单词接龙
- code【vs】1018 单词接龙(dfs)
- codevs1018单词接龙 lsj版+注释
- Codevs P1018 单词接龙
- codevs 天梯 单词接龙 DFS
- [CODEVS 1018] Noip 2000 单词接龙
- codevs1051接龙游戏