• 单词接龙


     

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

    输入

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

    输出

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

    样例输入

    5
    at
    touch
    cheat
    choose
    tact
    a
    
    

    样例输出

    23
    

    提示

    样例说明:连成的“龙”为atoucheatactactouchoose。

    明显是深搜。

    然后注意理解题意,包含并不是两个相同的字符串不能连在一起。

    搜索那段函数要多复习。

     1 #include <bits/stdc++.h>
     2 int n,ans=0;
     3 using namespace std;
     4 char s[21][1000];
     5 int judge[21][21];
     6 int flag[21],f[21];
     7 int vis(int a){
     8     int length=f[a];
     9     for(int i=1;i<=n;i++){
    10          int   temp=0;
    11         if(flag[i]<2&&judge[a][i]){
    12             flag[i]++;
    13             temp=vis(i);
    14             flag[i]--;
    15             temp+=f[a]-judge[a][i];
    16         }
    17         length=max(temp,length);
    18     }
    19     return length;
    20 }
    21 int main(){
    22     ios::sync_with_stdio(false);
    23     cin>>n;
    24     int i,j,k;
    25     for(i=1;i<=n;i++){
    26          cin>>s[i];
    27          f[i]=strlen(s[i]);
    28     }
    29     for(i=1;i<=n;i++){
    30         for(j=1;j<=n;j++){
    31             int len=min(f[i],f[j]);
    32             for(k=1;k<=len;k++){
    33                 if(strncmp(s[i]+f[i]-k,s[j],k)==0){
    34                     if(k!=f[i]) judge[i][j]=k;
    35                     break;
    36                 }
    37             }
    38         }
    39     }
    40     char t;
    41     cin>>t;
    42     int maxn=0;
    43     for(i=1;i<=n;i++){
    44         if(s[i][0]==t){
    45         flag[i]++;
    46         maxn=max(maxn,vis(i));
    47         flag[i]--;
    48         }
    49     }
    50     cout<<maxn<<endl;
    51     return 0;
    52 }
    View Code

    strncmp的作用是比较第一个参数和第二个参数长度为第三个参数长度的字符串。

    不要忘记努力,不要辜负自己 欢迎指正 QQ:1468580561
  • 相关阅读:
    关于Git的一些常规操作
    .Net 常用ORM框架对比:EF Core、FreeSql、SqlSuger (下篇)
    Myeclipse打开许多JSP文件或者js文件之后非常卡-------的解决办法
    单点登录常用生成token的操作-----UUID.randomUUID().toString() 简介
    如何使用时间复杂度和空间复杂度来区分算法的效率?
    自定义注解的简单使用
    企业中常用的Git和Svn比较。
    框架中常见的注解分析
    处理大数据流常用的三种Apache框架:Storm、Spark和Samza。(主要介绍Storm)
    养生食谱
  • 原文地址:https://www.cnblogs.com/smallocean/p/8552765.html
Copyright © 2020-2023  润新知