zoukankan      html  css  js  c++  java
  • NOIP 2000 单词接龙

    看到很久的一道题,敲起来略麻烦一直咕到现在。

    解法很水深搜+回溯就行

    每次枚举所有单词判断是否出现过两次以上,是否能接上,接上长度是多少,是否重叠就可以,当没有能接上的单词表示已搜完维护答案最大值即可。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    char s[50][300];
    int len[50],t[50],ans=0,n,maxn=-41324;
    void dfs(int id)
    {
        int flg=0;
        for(int i=1;i<=n;i++)
        {
            if(t[i]<2)
                for(int j=0;j<len[id];j++)
                {
                    if(s[i][0]==s[id][j])
                    {
                        if(j==0&&len[i]!=len[id]) continue;
                        int l=1;
                        bool pan=0;
                        for(int h=j+1;h<len[id];h++)
                            if(s[id][h]!=s[i][l++])
                            {
                                pan=1;
                                break;
                            }
                        if(pan==1) continue;
                        else
                        {
                            flg++;ans+=len[i]-l;t[i]++;
                            dfs(i);
                            flg--;ans-=len[i]-l;t[i]--;
                        }
                    }
                }
        }
        if(flg==0)
        {
            maxn=max(maxn,ans);
            return;
        }
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%s",&s[i]);
            len[i]=strlen(s[i]);
        }
        scanf("%s",&s[n+1]);
        for(int i=1;i<=n;i++)
            if(s[i][0]==s[n+1][0])
            {
                ans=len[i];t[i]++;dfs(i);
                ans=0;t[i]--;
            }
        printf("%d",maxn);
        return 0;
    }
  • 相关阅读:
    nginx 学习
    java 数组转字符串(以逗号分隔开)
    索引命名规范
    java常见的设计模式
    java中的堆、栈浅解。
    Oracle忘记System密码怎么办?
    端口被占用,怎么解决?
    Spring Mvc学习之路
    svg了解一下
    推荐几款基于vue的使用插件
  • 原文地址:https://www.cnblogs.com/charlesss/p/10732823.html
Copyright © 2011-2022 走看看