Section 2.1 - Healthy Holsteins

 1  #include  < iostream >
 2 
 3  using   namespace  std;
 4 
 5  int  n, m;
 6  int  need[ 25 ];
 7  int  feed[ 15 ][ 25 ];
 8 
 9  int  ans  =   32767 ;
10  int  cur_need[ 25 ], x[ 15 ], bestx[ 15 ];
11 
12  void  search( int  i,  int  c)
13  {
14       if  (i  ==  m)
15      {
16           int  j;
17           for  (j  =   0 ; j  <  n; j ++ )
18               if  (cur_need[j]  <  need[j])
19                   break ;
20           if  (j  ==  n)
21          {
22              ans  =  c;
23              memcpy(bestx, x,  sizeof (x));
24          }
25           return ;
26      }
27 
28       if  (c  +   1   <  ans)
29      {
30           for  ( int  j  =   0 ; j  <  n; j ++ )
31              cur_need[j]  +=  feed[i][j];
32          x[i]  =   1 ;
33 
34          search(i  +   1 , c  +   1 );
35 
36          x[i]  =   0 ;
37           for  ( int  j  =   0 ; j  <  n; j ++ )
38              cur_need[j]  -=  feed[i][j];
39      }
40 
41      search(i  +   1 , c);
42  }
43 
44  int  main()
45  {
46      freopen( " holstein.in " " r " , stdin);
47      freopen( " holstein.out " " w " , stdout);
48 
49      cin  >>  n;
50       for  ( int  i  =   0 ; i  <  n; i ++ )
51          cin  >>  need[i];
52      cin  >>  m;
53       for  ( int  i  =   0 ; i  <  m; i ++ )
54       for  ( int  j  =   0 ; j  <  n; j ++ )
55          cin  >>  feed[i][j];
56 
57      search( 0 0 );
58 
59      cout  <<  ans  <<   '   ' ;
60       for  ( int  i  =   0 , j  =   0 ; j  <  ans; i ++ )
61           if  (bestx[i])
62          {
63              j ++ ;
64              cout  <<  i  +   1   <<  (j  ==  ans  ?   ' \n '  :  '   ' );
65          }
66 
67       return   0 ;
68  }
69 

你可能感兴趣的:(Section 2.1 - Healthy Holsteins)