[T][2]NOIP 2001 单词接龙
来源:互联网 发布:windows手机壁纸 编辑:程序博客网 时间:2024/06/05 06:14
题目描述
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连。
输入输出格式
输入格式:
输入的第一行为一个单独的整数n (n<=20)表示单词数,以下n 行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在.
输出格式:
只需输出以此字母开头的最长的“龙”的长度
输入输出样例
输入样例#1:
5
at
touch
cheat
choose
tact
a
输出样例#1:
23 (连成的“龙”为atoucheatactactouchoose)
说明
NOIp2000提高组第三题
【分析】
暴搜水题…
【代码】
//洛谷 P1019 单词接龙#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define ll long long#define M(a) memset(a,0,sizeof a)#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;const int mxn=25;char s[25][100005];int n,ans;int vis[mxn],len[mxn];inline void dfs(int num,int res){ int i,j,k; ans=max(ans,res); for(i=len[num];i>=2;i--) { fo(j,1,n) if(vis[j]<2) { bool flag=1; fo(k,1,len[num]-i+1) if(s[j][k]!=s[num][i+k-1]) {flag=0;break;} if(!flag) continue; vis[j]++; dfs(j,res-len[num]+i+len[j]-1); vis[j]--; } }}int main(){ int i,j; scanf("%d",&n); fo(i,1,n) { scanf("%s",s[i]+1); len[i]=strlen(s[i]+1); } fo(i,1,n) { vis[i]++,dfs(i,len[i]),vis[i]--; if(ans==31) break; } printf("%d\n",ans); return 0;}
0 0
- [T][2]NOIP 2001 单词接龙
- 2000NOIP 单词接龙
- NOIP 2000 单词接龙
- codevs 1018 [noip 2000 提高] 单词接龙
- codevs 1018 noip 2000 单词接龙
- [NOIP提高组2000]单词接龙
- NOIP 2000单词接龙 解题报告(爆搜)
- 【NOIP 2000 提高组 T3】单词接龙(dfs)
- NOIP 2000 单词接龙ACC pascal程序加题解。
- NOIP 2000年提高组复赛 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- txt文件导入mysql
- Sublime Text 3安装破解+汉化包 + 教程
- HDU 3033 I love sneakers! (分组背包 每组至少选一个)
- [C++杂谈]:C++中宏的使用
- struts.xml配置文件入门小结
- [T][2]NOIP 2001 单词接龙
- Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)
- Java算法之“分解质因数”
- LeetCode 210. Course Schedule II 题解
- 第一个Servlet程序 HelloServlet
- POJ 3757 Simple Distributed storage system 01分数规划
- 博客网站页面的实现(html)
- nodejs实现发送验证码到qq邮箱(附有源码)
- 两个for循环的优缺点