摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 需要注意
单词接龙 ★☆☆☆☆ 答案正确 100 2014-10-17 23:27:16

题意

一堆单词,一个字母开始,单词首尾相连(可重复多个字母),每个单词最多用2次,最长能接多长?

题解

暴搜就好了,没什么技巧。

代码

1018.cpp代码已折叠
展开折叠内容
显示/移除行号
  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4. int n,maxLen=0;
  5. vector<string> Str;
  6. vector<int> Used;
  7. void dfs(const char& strId,const int &count,const int &len)
  8. {
  9. maxLen=max(maxLen,len);
  10. for(int i=0;i<n;++i)
  11. {
  12. if(Used[i]>0)
  13. {
  14. Used[i]--;
  15. for(int j=min(Str[strId].size(),Str[i].size())-1;j>=1;--j)
  16. {
  17. string strCut(Str[strId],Str[strId].size()-j,j),
  18. newstrCut(Str[i],0,j);
  19. if(strCut==newstrCut)
  20. {
  21. dfs(i,count+1,len+Str[i].size()-j);
  22. }
  23. }
  24. Used[i]++;
  25. }
  26. }
  27. }
  28.  
  29. int main()
  30. {
  31. cin>>n;
  32. string str;
  33. for(int i=0;i<n;++i)
  34. {
  35. cin>>str;
  36. Str.push_back(str);
  37. Used.push_back(2);
  38. }
  39. char start;
  40. cin>>start;
  41. for(int i=0;i<n;++i)
  42. {
  43. if(start==Str[i][0])
  44. {
  45. Used[i]--;
  46. dfs(i,1,Str[i].size());
  47. Used[i]++;
  48. }
  49. }
  50. cout<<maxLen<<endl;
  51. return 0;
  52. }

著作权声明[编辑]

关于[编辑]