• 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也就是所谓的搜索其实挺简单。不过真心被刚开始那几题恶心了。

  • 相关阅读:
    Thinkphp的import使用方法
    bug1
    setTimeout关于函数名做参数的问题
    ubuntu-12.04.5安装cacti笔记
    第七周作业
    第六周作业
    第五周作业
    第四周编程总结
    2019年春季学期第三周作业
    第二周编程总结
  • 原文地址:https://www.cnblogs.com/Neptunes/p/3289342.html
Copyright © 2020-2023  润新知