【搜索】单词接龙 luogu-1019
2018-09-16 19:45
302 查看
题目描述
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和 atide 间不能相连。
AC代码
var st:array[1..20]of string; n,ans,i:longint; vis:array[1..20]of longint; function max(n,m:longint):longint; begin if n>m then exit(n) else exit(m); end; function min(n,m:longint):longint; begin if n<m then exit(n) else exit(m); end; function cover(st1,st2:string):longint; var i,j:longint; fg:boolean; begin for i:=1 to min(length(st1),length(st2))-1 do begin fg:=true; for j:=1 to i do if st1[length(st1)-i+j]<>st2[j] then fg:=false; if fg then exit(i); end; exit(0); end; procedure dfs(s:string;len:longint); var i,covernum:longint; begin ans:=max(ans,len); for i:=1 to n do begin if vis[i]>=2 then continue; covernum:=cover(s,st[i]); if covernum>0 then begin inc(vis[i]); dfs(st[i],len+length(st[i])-covernum); dec(vis[i]); end; end; end; begin fillchar(vis,sizeof(vis),0); readln(n); for i:=1 to n+1 do readln(st[i]); ans:=0; dfs(' '+st[n+1],1); writeln(ans); end.
相关文章推荐
- 【NOIP2000】【Luogu1019】单词接龙
- luogu1019【2000提高】单词接龙(字符串+dfs)
- 蓝桥杯 算法训练 单词接龙 By Assassin [搜索水题]
- 【搜索】单词方阵 luogu-1101
- 洛谷 P1019 单词接龙【经典DFS,温习搜索】
- 洛谷1019 单词接龙
- 1018 单词接龙 (搜索 字符串处理)
- AYOJ 单词接龙(搜索)
- C++搜索与回溯算法之单词接龙
- 蓝桥杯 算法训练 单词接龙 _DFS_搜索 字符串比较
- 【搜索】noi openjudge 2.5 单词接龙
- 深度优先搜索 之 CODE[VS] 1018 单词接龙 2000年NOIP全国联赛普及组NOIP全国联赛提高组
- [luoguP1019] 单词接龙(DFS)
- Luogu 单词接龙
- 洛谷Oj-单词接龙-深度优先搜索
- 洛谷P1019 单词接龙
- 洛谷18-03-12-P1019 单词接龙
- 写给妹妹的编程札记 6 - 搜索实战: 单词博弈
- 单词接龙
- 【JZOJ 3852】 单词接龙