题目描述

单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连。

输入输出格式

输入格式:

输入的第一行为一个单独的整数nn (n≤20)表示单词数,以下n 行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在.

输出格式:

只需输出以此字母开头的最长的“龙”的长度

输入输出样例

输入样例#1:

5
at
touch
cheat
choose
tact
a

输出样例#1:

23

说明

(连成的“龙”为atoucheatactactouchoose)

NOIp2000提高组第三题

代码:

//洛谷P1019单词接龙
//2019年3月16日
#include <iostream>
#include <cstdio>
using namespace std;const int MAXN = 24;
int n, ans, book[MAXN], connect[MAXN][MAXN];
string word[MAXN];
char start;int check(int x, int y){   //将x接在y后int l1 = word[x].size(), l2 = word[y].size();bool flag;for (int k = 1; k < min(l1, l2); k++){flag = true;int i = l1 - k, j = 0;while (i < l1 && j < k){if (word[x][i] != word[y][j]){flag = false;break;}i++, j++;}if (flag) return k;}return 0;
}void dfs(int pre, int len){   //当前构成的“龙”的结尾字符串word[pre] 当前构成的字符串的长度ans = max(ans, len);for (int i = 1; i <= n; i++){if (book[i] > 1) continue;   //每个单词都最多在“龙”中出现两次if (connect[pre][i] == 0) continue;book[i]++;
//      cout << len << " + " << word[pre] << " + " << word[i] << " = " << len + word[i].size() - connect[pre][i] << endl;dfs(i, len + word[i].size() - connect[pre][i]);book[i]--; }
}int main(){scanf("%d", &n);for (int i = 1; i <= n; i++)cin >> word[i];cin >> start;//预处理:任意两个单词是否可连接 若可则返回连接部分的长度 for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++){connect[i][j] = check(i, j);
//          cout << word[i] << " - " << word[j] << " : " << connect[i][j] << endl;}for (int i = 1; i <= n; i++){if (word[i][0] == start){   //每次从可以作为起始的单词开始搜 book[i]++;dfs(i, word[i].size());book[i]--;}}cout << ans;return 0;
}

luogu P1019 单词接龙 题解相关推荐

  1. 洛谷 P1019 单词接龙 Label:dfs

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  2. 洛谷 P1019 单词接龙 (DFS)

    题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...

  3. P1019 单词接龙 (DFS)

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  4. 洛谷——P1019 单词接龙

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  5. 洛谷 P1019 单词接龙

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  6. 洛谷P1019 单词接龙

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  7. 洛谷 [P1019 单词接龙] {搜索|DFS} 奋斗的珂珂~

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  8. Luogu 1019 单词接龙

    题目链接:https://www.luogu.org/problemnew/show/P1019 思路: 审题很重要. 题中有一些要注意的点: 1.每个单词都最多在"龙"中出现两次 ...

  9. 信息学奥赛一本通 1220:单词接龙 | 1913:【00NOIP普及组】单词接龙 | OpenJudge NOI 2.5 8783 | 洛谷 P1019 [NOIP2000 提高组] 单词接龙

    [题目链接] ybt 1220:单词接龙 ybt 1913:[00NOIP普及组]单词接龙 OpenJudge NOI 2.5 8783:单词接龙 洛谷 P1019 [NOIP2000 提高组] 单词 ...

最新文章

  1. Oh-My-Zsh及主题、插件安装与配置
  2. python输入输出-python输入与输出
  3. 数据库元数据数据字典查询_3_列出给定表的基本信息
  4. spring mvc传值html页面,spring mvc向前台页面传值-ModelAndView
  5. LeetCode 354. 俄罗斯套娃信封问题(最长上升子序 DP/二分查找)
  6. 英国汇丰银行拒绝为客户处理加密货币交易
  7. NVT NT98510 SDK介绍
  8. cnpack 菜单顺序
  9. FastDFS原理及入门
  10. python 播放本地音乐_python播音乐_python放音乐_python本地音乐播放器 - 云+社区 - 腾讯云...
  11. 12/22从东京到布里斯班
  12. 用户IP访问次数统计
  13. python实用的语法和函数
  14. 人体体重秤体脂秤方案PCBA设计
  15. 企业微信聊天框中点击自建应用获取当前聊天外部联系人userid,wx.agentConfig调用
  16. 如何访问sci-hub?(更新于2017年11月26日)
  17. 机器学习中常用的分类算法总结
  18. 中国各省份名字的由来
  19. MySQL:一主两从架构(读写分离)
  20. 计算机无法联网的原因和解决方案,电脑连接不上网的原因和解决办法

热门文章

  1. 如何开发直播带货平台?
  2. python文字提取关键信息_Python提取图片中的文字信息,腾讯内部技术,一行代码搞定!...
  3. gpsone 位置服务器,【图】手机导航-GPS搜星速度优化(android手机)
  4. mac、iOS端支持自定义布局的collection控件的实现与设计
  5. jetson nano poe_流放之路S13贵族COC流派加点配置攻略 POE贵族COC配什么技能
  6. xbox手柄接收器驱动_新手有什么PC电脑手柄推荐?简单易懂5分钟教会你做出选择...
  7. 华为云迁移工具推荐最佳实践:KVM虚拟化迁移到华为云
  8. 我的优点是会使用计算机用英语怎,用英文表达自己的优缺点的句子有哪些?
  9. Java循环录入会员信息
  10. 网站建设:提高网站访问量的策略