摘要
题目链接 |
难度等级 |
完成状态 |
完成分数 |
最后编辑时间 |
需要注意
|
单词接龙
|
★☆☆☆☆
|
答案正确
|
100
|
2014-10-17 23:27:16
|
无
|
题意
一堆单词,一个字母开始,单词首尾相连(可重复多个字母),每个单词最多用2次,最长能接多长?
题解
暴搜就好了,没什么技巧。
代码
1018.cpp代码已折叠
展开折叠内容
|
- #include<iostream>
- #include<vector>
- using namespace std;
- int n,maxLen=0;
- vector<string> Str;
- vector<int> Used;
- void dfs(const char& strId,const int &count,const int &len)
- {
- maxLen=max(maxLen,len);
- for(int i=0;i<n;++i)
- {
- if(Used[i]>0)
- {
- Used[i]--;
- for(int j=min(Str[strId].size(),Str[i].size())-1;j>=1;--j)
- {
- string strCut(Str[strId],Str[strId].size()-j,j),
- newstrCut(Str[i],0,j);
- if(strCut==newstrCut)
- {
- dfs(i,count+1,len+Str[i].size()-j);
- }
- }
- Used[i]++;
- }
- }
- }
-
- int main()
- {
- cin>>n;
- string str;
- for(int i=0;i<n;++i)
- {
- cin>>str;
- Str.push_back(str);
- Used.push_back(2);
- }
- char start;
- cin>>start;
- for(int i=0;i<n;++i)
- {
- if(start==Str[i][0])
- {
- Used[i]--;
- dfs(i,1,Str[i].size());
- Used[i]++;
- }
- }
- cout<<maxLen<<endl;
- return 0;
- }
|