zoukankan      html  css  js  c++  java
  • 洛谷1019 单词接龙 字符串dfs

    问题描述

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

    题解

    第一次知道c++字符串可以直接拼接。。感觉就是暴力模拟啊,写一个dfs找最大长度,每次判断能不能进行拼接,然后进行相接找最大长度。

    #include<bits/stdc++.h>
    #include<cstring>
    using namespace std;
    string s;
    string word[110];
    int use[110];
    int n,ans;
    bool check(string a,string b,int m){
        int len=a.length();
        for(int k=0;k<m;k++){
            if(a[len-m+k]!=b[k])return 0;
        }
        return 1;
    }
    void add(string &a,string b,int m){
        int len=b.length();
        for(int i=m;i<len;i++){
            a+=b[i];
        }
    }
    void dfs(string now){
        int len=now.length();
        ans=max(len,ans);
        for(int i=1;i<=n;i++){
            if(use[i]>=2)continue;
            int k=word[i].length();
            for(int j=1;j<=k;j++){
                if(check(now,word[i],j)){
                    string tmp=now;
                    add(tmp,word[i],j);
                    int q=tmp.length();
                    if(q<=len)continue;
                    use[i]++;
                    dfs(tmp);
                    use[i]--;
                }
            }
        }
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            cin>>word[i];
        }
        cin>>s;
        dfs(s);
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    UI自动化实现多浏览器运行
    【转】C#操作XML方法集合
    日拱一卒
    敏捷开发- planning会议中的开会趣事
    敏捷开发- 可行走的骨骼
    敏捷开发- 测试人员何去何从
    Nunit & Specflow
    [转]根本原因分析(Root Cause Analysis)
    Selenium 中抓取dropdown
    网页模板
  • 原文地址:https://www.cnblogs.com/Elfish/p/7638619.html
Copyright © 2011-2022 走看看