zoukankan      html  css  js  c++  java
  • USACO1.6 Healthy Holsteins【dfs/bfs 爆搜】

    题目传送门

    饲料种数只有15 枚举每种选或不选一共也就只有$2^{15}=32768$ 爆搜可过
    觉得bfs要快一些? 但是dfs更方便处理字典序 只需要顺序遍历并且先搞选它的情况就可以了

    而且在这种规模的数据下我们也不需要它跑得很快对吧(笑)

     1 /*
     2 ID: Starry21
     3 LANG: C++
     4 TASK: holstein                 
     5 */  
     6 #include<iostream>
     7 #include<string>
     8 #include<cstdio>
     9 #include<cstring>
    10 #include<vector>
    11 #include<algorithm>
    12 #include<queue>
    13 using namespace std;
    14 #define N 30
    15 #define ll long long
    16 #define INF 0x3f3f3f3f
    17 int n,nd[N],g,aln[N][N];/*afternative*/
    18 int cv[N];/*chosen value*/
    19 bool cs[N]/*chosen*/,res[N];
    20 int ans=INF;
    21 bool check()
    22 {
    23     for(int i=1;i<=n;i++)
    24         if(cv[i]<nd[i])
    25             return 0;
    26     return 1;
    27 }
    28 void dfs(int k,int num)
    29 {
    30     //被注释的部分可以互相替代吧 觉得没被注释的要快一些 相当于剪枝吧 
    31     /*if(k>g)
    32     {
    33         if(check()&&num<ans)
    34         {
    35             ans=num;
    36             memcpy(res,cs,sizeof(cs));
    37         }
    38         return ;
    39     }*/
    40     if(check())
    41     {
    42         if(num<ans)
    43         {
    44             ans=num;
    45             memcpy(res,cs,sizeof(cs));
    46         }
    47         return ;
    48     }
    49     if(k>g) return ;
    50     
    51     
    52     for(int i=1;i<=n;i++)
    53         cv[i]+=aln[k][i];
    54     cs[k]=1;
    55     dfs(k+1,num+1);
    56     for(int i=1;i<=n;i++)
    57         cv[i]-=aln[k][i];
    58     cs[k]=0;
    59     dfs(k+1,num);
    60     return ;
    61 }
    62 int main() 
    63 {
    64     //freopen("holstein.in","r",stdin);
    65     //freopen("holstein.out","w",stdout);
    66     scanf("%d",&n);
    67     for(int i=1;i<=n;i++)
    68         scanf("%d",&nd[i]);
    69     scanf("%d",&g);
    70     for(int i=1;i<=g;i++)
    71         for(int j=1;j<=n;j++)
    72             scanf("%d",&aln[i][j]);
    73     dfs(1,0);
    74     printf("%d",ans);
    75     for(int i=1;i<=g;i++)
    76         if(res[i]) printf(" %d",i);
    77     puts("");
    78     return 0;
    79 }
    Code

     

  • 相关阅读:
    好记性不如烂笔头-linux学习笔记2kickstart自动化安装和cacti
    好记性不如烂笔头-linux学习笔记1
    关于TP5中的依赖注入和容器和facade
    vbs 脚本2
    vbs脚本
    Memcache 和 Radis 比较
    MongoDB 索引的使用, 管理 和优化
    mysql大数据高并发处理
    sql处理高并发
    LB 负载均衡的层次结构
  • 原文地址:https://www.cnblogs.com/lyttt/p/11656626.html
Copyright © 2011-2022 走看看