HRBUST单词接龙
题目描述
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连。
输入输出格式
输入格式:
输入的第一行为一个单独的整数n (n<=20)表示单词数,以下n 行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在.
输出格式:
只需输出以此字母开头的最长的“龙”的长度
输入输出样例
输入样例#1:
5
at
touch
cheat
choose
tact
a
输出样例#1:
23 (连成的“龙”为atoucheatactactouchoose)
这个题可以写出每两个单词之间的所能叠加的长度然后用dfs搜索得到最长的结果
#include <iostream>
#include <string.h>
using namespace std;
char s[33][33];
int len[33][33];
int vis[33];
int n,ans;
void make()
{
char s1[33],s2[33];
int k,minlong;
int flag;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
minlong=min(strlen(s[i]),strlen(s[j]));
flag=1;
k=1;
len[i][j]=0;
while (flag&&k<minlong) {
for(int z=strlen(s[i])-k;z<=strlen(s[i]);z++)
{
s1[z-strlen(s[i])+k]=s[i][z];//拼接的前一半的后半部
}
for(int z=0;z<k;z++)
{
s2[z]=s[j][z];
}
s2[k]='\0';
if(!strcmp(s1, s2))
{
len[i][j]=strlen(s[j])-k;//减去覆盖的
flag=0;
}
else
k++;
}
} }
}
void tryit(int last,int length)
{
ans=max(ans,length);
for(int i=1;i<=n;i++)
{
if(len[last][i]&&vis[i]<2)
{
vis[i]++;
tryit(i, length+len[last][i]);
vis[i]--;
}
}
}
int main()
{
char ch;
while(cin>>n){
memset(vis, 0, sizeof(vis));
memset(len, 0, sizeof(len));
for(int i=1;i<=n;i++)cin>>s[i];
cin>>ch;
make();
ans=0;
for(int i=1;i<=n;i++)
{
if(s[i][0]==ch)
{
vis[i]=1;
tryit(i, strlen(s[i]));
vis[i]=0;
}
}
cout<<ans<<endl;
}
return 0;
}
HRBUST单词接龙的更多相关文章
- NOIP2000单词接龙[DFS]
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- Noip2000 T3 单词接龙
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- 洛谷 P1019 单词接龙 Label:dfs
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- 【wikioi】1018 单词接龙
题目链接 算法:DFS+考你阅题 题目描述: 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中 ...
- NOIP2000 单词接龙
题三. 单词接龙 (27分) 问题描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的 ...
- 1172: 单词接龙(XCOJ 暴力DFS)
1172: 单词接龙 时间限制: 1 Sec 内存限制: 128 MB提交: 12 解决: 5 标签提交统计讨论版 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词 ...
- 单词接龙(dragon)
单词接龙(dragon) 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次) ...
- NOIP2000提高组 单词接龙
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...
- 洛谷 P1019 单词接龙【经典DFS,温习搜索】
P1019 单词接龙 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在 ...
随机推荐
- MVC ---- Manager.ttinclude内容
http://www.infoq.com/cn/news/2009/11/T4-Multiple-Output 初次认识并尝试使用T4生成代码的时候,相关学习资料似乎比较少.不过现在VS2010 的M ...
- Window系统下用Ant实现Java项目的自动构建和部署
https://blog.csdn.net/xinxin19881112/article/details/7297021 Step 1: 从官网下载Ant包,官网地址http://ant.apache ...
- java基础学习总结——线程(一)
一.线程的基本概念
- RPC 服务器不可用
1,查看“Remote Procedure Call (RPC)”启动2,设置下面选项.・Hyper-V服务器->虚拟交换机管理器,在虚拟交换机的[连接类型]下, 勾选[允许管理操作系统共享此网 ...
- 模块commonjs AMD UMD
commonjs是用在服务器端的,同步的,如nodejs amd, cmd是用在浏览器端的,异步的,如requirejs和seajs 其中,amd先提出,cmd是根据commonjs和amd基础上提出 ...
- Java 常用对象-BigDecimal
2017-11-02 22:03:14 BigDecimal类:不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成.如果为 ...
- [可能没有默认的字体]Warning: imagettfbbox() [function.imagettfbbox]: Invalid font filename...
Warning: imagettfbbox() [function.imagettfbbox]: Invalid font filename... [可能没有默认的字体] 例: //putenv('G ...
- WPF样式——经典博客
WPF样式博客:http://www.cnblogs.com/luluping/archive/2011/05/06/2039498.html
- python模块——socket (实现简单的C/S架构端通信操作CMD)
# 服务端代码#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" import socket impo ...
- HDOJ-1124 Factorial 数论
题意哇:求N!末尾多少个0. 很容易想到转化为求N!中5因子的个数.但是从数据范围来看必然不可能一个一个算出来. 所以这里借用数论的一个知识. 如果p是素数,那么n!中p因子的个数可以表示为1-n中整 ...