zoukankan      html  css  js  c++  java
  • poj 1699 Best Sequence(dfs)

    *题意:
         给一定数量的基因片段,将这些片段可并成一条片段,输出最短片段的长度。
    *思路:
         将不同片段两两组合,求出最短长度存在addlen[i][j]中,然后用dfs遍历addlen[i][j](即把所有片段组合成一串)保存最短片段的长度,最后输出。实际上就是枚举各种情况,当然在串成一串的过程中若发现长度已经比先前存的最短长度要长就可以舍弃,直接进入下一种情况
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    char gene[11][111];
    int addlen[11][11],len[11],sign[11];
    int n,t,ans;
    void add(int i,int j)
    {
        int k,l,m,le=0;
        for(k=1;k<=len[i]&&k<=len[j];k++)
        {
            for(l=0,m=len[i]-k;l
            {
                if(gene[j][l]!=gene[i][m])
                    break;
            }
            if(l==k)
            le=k;
        }
        addlen[i][j]=len[j]-le;
    }
    void dfs(int pre,int num,int slen)
    {
        int i;
        if(slen>ans)//舍弃
            return;
        if(num==t)
        {
            if(slen
                ans=slen;
            return;
        }
        for(i=0;i
        {
            if(sign[i]==0)
            {
                sign[i]=1;
                dfs(i,num+1,addlen[pre][i]+slen);
                sign[i]=0;
            }
        }
    }
    int main()
    {
        int i,j,k;
        cin>>n;
        while(n--)
        {
            cin>>t;
            for(i=0;i
            {
                cin>>gene[i];
                len[i]=strlen(gene[i]);
            }
            for(i=0;i
                for(j=0;j
                add(i,j);
                memset(sign,0,sizeof(sign));
                ans=1000;
            for(i=0;i
            {
                sign[i]=1;
                dfs(i,1,len[i]);
                sign[i]=0;
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    

      *注:第一次看dfs的题,自己对dfs的用法一窍不通,看了别人的代码好久才明白过来,其实dfs也就是所谓的搜索其实挺简单。不过真心被刚开始那几题恶心了。

  • 相关阅读:
    Object的公用方法
    Java的特点
    Set集合
    Java语言的三大特性
    List集合
    Collection类
    HashSet
    Codeforces1141F2 Same Sum Blocks (Hard)
    Codeforce1176F Destroy it!
    jzoj 5348. 【NOIP2017提高A组模拟9.5】心灵治愈
  • 原文地址:https://www.cnblogs.com/Neptunes/p/3289342.html
Copyright © 2011-2022 走看看