luogu P1019 单词接龙 题解
题目描述
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 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 单词接龙 题解相关推荐
- 洛谷 P1019 单词接龙 Label:dfs
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...
- 洛谷 P1019 单词接龙 (DFS)
题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...
- P1019 单词接龙 (DFS)
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...
- 洛谷——P1019 单词接龙
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...
- 洛谷 P1019 单词接龙
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...
- 洛谷P1019 单词接龙
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...
- 洛谷 [P1019 单词接龙] {搜索|DFS} 奋斗的珂珂~
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...
- Luogu 1019 单词接龙
题目链接:https://www.luogu.org/problemnew/show/P1019 思路: 审题很重要. 题中有一些要注意的点: 1.每个单词都最多在"龙"中出现两次 ...
- 信息学奥赛一本通 1220:单词接龙 | 1913:【00NOIP普及组】单词接龙 | OpenJudge NOI 2.5 8783 | 洛谷 P1019 [NOIP2000 提高组] 单词接龙
[题目链接] ybt 1220:单词接龙 ybt 1913:[00NOIP普及组]单词接龙 OpenJudge NOI 2.5 8783:单词接龙 洛谷 P1019 [NOIP2000 提高组] 单词 ...
最新文章
- Oh-My-Zsh及主题、插件安装与配置
- python输入输出-python输入与输出
- 数据库元数据数据字典查询_3_列出给定表的基本信息
- spring mvc传值html页面,spring mvc向前台页面传值-ModelAndView
- LeetCode 354. 俄罗斯套娃信封问题(最长上升子序 DP/二分查找)
- 英国汇丰银行拒绝为客户处理加密货币交易
- NVT NT98510 SDK介绍
- cnpack 菜单顺序
- FastDFS原理及入门
- python 播放本地音乐_python播音乐_python放音乐_python本地音乐播放器 - 云+社区 - 腾讯云...
- 12/22从东京到布里斯班
- 用户IP访问次数统计
- python实用的语法和函数
- 人体体重秤体脂秤方案PCBA设计
- 企业微信聊天框中点击自建应用获取当前聊天外部联系人userid,wx.agentConfig调用
- 如何访问sci-hub?(更新于2017年11月26日)
- 机器学习中常用的分类算法总结
- 中国各省份名字的由来
- MySQL:一主两从架构(读写分离)
- 计算机无法联网的原因和解决方案,电脑连接不上网的原因和解决办法
热门文章
- 如何开发直播带货平台?
- python文字提取关键信息_Python提取图片中的文字信息,腾讯内部技术,一行代码搞定!...
- gpsone 位置服务器,【图】手机导航-GPS搜星速度优化(android手机)
- mac、iOS端支持自定义布局的collection控件的实现与设计
- jetson nano poe_流放之路S13贵族COC流派加点配置攻略 POE贵族COC配什么技能
- xbox手柄接收器驱动_新手有什么PC电脑手柄推荐?简单易懂5分钟教会你做出选择...
- 华为云迁移工具推荐最佳实践:KVM虚拟化迁移到华为云
- 我的优点是会使用计算机用英语怎,用英文表达自己的优缺点的句子有哪些?
- Java循环录入会员信息
- 网站建设:提高网站访问量的策略