博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codevs1018 单词接龙(DFS)
阅读量:4700 次
发布时间:2019-06-09

本文共 2054 字,大约阅读时间需要 6 分钟。

题目描述 
Description

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

输入描述 
Input Description

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

输出描述 
Output Description

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

样例输入 
Sample Input

5

at

touch

cheat

choose

tact

a

 

样例输出 
Sample Output

23    

数据范围及提示 
Data Size & Hint

(连成的“龙”为atoucheatactactouchoose)     

就从给定字母开始不断找能接在最后一个单词后面且使用次数小于两次的单词。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define rep(i,f,t) for(int i = (f),_end_=(t); i <= _end_; ++i)#define rep2(i,f,t) for(int i = (f),_end_=(t); i < _end_; ++i)#define dep(i,f,t) for(int i = (f),_end_=(t); i >= _end_; --i)#define dep2(i,f,t) for(int i = (f),_end_=(t); i > _end_; --i)#define clr(c, x) memset(c, x, sizeof(c) )typedef long long int64;const int INF = 0x5f5f5f5f;const double eps = 1e-8;//*****************************************************string s[22];int n;int vis[22];bool ok(const string &st, int i, int j) //判断单词st能否从i位置开始将第j个单词拼接上{ if(s[j].size() < st.size()-i)return false; for(int k = 0; i < st.size(); ++i, ++k) { if(st[i] != s[j][k])return false; } return true;}int dfs(int t,int len){ int ans = len; ++vis[t]; //单词使用次数 rep(j,1,n) { if(vis[j] >= 2)continue; int jian = 0; for(string::iterator i = s[t].end()-1; i != s[t].begin(); --i) //尽量从单词尾部开始拼接 { ++jian; //与新单词重合的长度 if(ok( s[t], i-s[t].begin() , j)) { int tmp = dfs(j,len+s[j].size()-jian); ans = max(ans,tmp); //记录最大长度 break; } } } --vis[t]; //还原该单词使用次数 return ans;}int solve(char c){ int ans = 0; rep(i,1,n) { if(s[i][0]==c) { int tmp = dfs(i,s[i].size()); ans = max(ans,tmp); } } return ans;}int main(){ cin>>n; rep(i,1,n)cin>>s[i]; char c; cin>>c; int ans = solve(c); cout<
<

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/DSChan/p/4862013.html

你可能感兴趣的文章
git常用操作
查看>>
京东SSO单点登陆实现分析
查看>>
u-boot启动第一阶段
查看>>
MySQL批量SQL插入性能优化
查看>>
定义列属性:null,default,PK,auto_increment
查看>>
用户画像展示
查看>>
C#中StreamReader读取中文出现乱码
查看>>
使用BufferedReader的时候出现的问题
查看>>
批处理文件中的路径问题
查看>>
hibernate出现No row with the given identifier exists问题
查看>>
为什么wait()和notify()属于Object类
查看>>
配置NRPE的通讯
查看>>
匹配两个空格之间的字符。。。
查看>>
CSS 文字溢出 变成省略号 ...
查看>>
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
修改node节点名称
查看>>