zoukankan      html  css  js  c++  java
  • POJ1699Best Sequence(DFS)

    链接

    这题其实是由bug的 一个串包含其它两个串的数据没有 所以就这么水了它吧 只处理两个串的关系就行了

    回来补点。。看了huge的博客 发现其实不是有Bug  题意没读清楚 必须首尾相连 像AGCT GC这样就不算。。降低了复杂

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 using namespace std;
     7 #define INF 0x3f3f3f
     8 char s[22][22];
     9 int k[22],o[22][22],n;
    10 int vis[22],ans;
    11 void init()
    12 {
    13     int i,j;
    14     for(i = 1 ; i <= n ; i++)
    15     {
    16         for(j =  1; j <= n ; j++)
    17         {
    18             if(i==j)
    19             continue;
    20             o[i][j] = 0;
    21             for(int g = 0 ; g < k[i] ; g++)
    22             {
    23                 if(s[j][0]==s[i][g])
    24                 {
    25                     int k1 = 1,k2 = g+1;
    26                     while(k1<k[i]&&k2<k[j]&&s[j][k1]==s[i][k2])
    27                     {
    28                         k1++;
    29                         k2++;
    30                     }
    31                     if(k1==k[i]||k2==k[j])
    32                     {
    33                         o[i][j] = k1;
    34                         break;
    35                     }
    36                 }
    37             }
    38         }
    39     }
    40 }
    41 void dfs(int x,int v,int sum)
    42 {
    43     if(sum>ans)
    44     return ;
    45     if(v==n)
    46     {
    47         ans = sum;
    48         return ;
    49     }
    50     int i;
    51     for(i = 1; i <= n ; i++)
    52     {
    53         if(!vis[i])
    54         {
    55             vis[i] = 1;
    56             sum+=(k[i]-o[x][i]);
    57             dfs(i,v+1,sum);
    58             sum-=(k[i]-o[x][i]);
    59             vis[i] = 0;
    60         }
    61     }
    62 }
    63 int main()
    64 {
    65     int i,t;
    66     scanf("%d",&t);
    67     while(t--)
    68     {
    69         memset(vis,0,sizeof(vis));
    70         ans = INF;
    71         scanf("%d%*c",&n);
    72         for(i = 1 ; i <= n ;i++)
    73         {
    74             scanf("%s",s[i]);
    75             k[i] = strlen(s[i]);
    76         }
    77         init();
    78         for(i = 1; i <= n ;i++)
    79         {
    80             vis[i] = 1;
    81             dfs(i,1,k[i]);
    82             vis[i] = 0;
    83         }
    84         printf("%d
    ",ans);
    85     }
    86     return 0;
    87 }
    View Code
  • 相关阅读:
    Django之模板
    Django之视图
    Django之web框架和url路由
    SpringBoot整合Druid数据源
    SpringBoot整合定时任务异步任务
    逐行解读HashMap源码
    SpringBoot通过RedisTemplate执行Lua脚本
    SpringBoot使用H2内嵌数据库
    SpringBoot如何使用拦截器
    SpringBoot热部署的实现方式
  • 原文地址:https://www.cnblogs.com/shangyu/p/3295912.html
Copyright © 2011-2022 走看看