USACO 2.1 Healthy Holsteins(枚举)

本来以为是一个好高深的DP的,看了看数据范围,枚举啊。。。n和m分不清了,错了好几次,以后用题目里面的变量,养成好习惯。。。

 1 /*
 2  ID: cuizhe
 3  LANG: C++
 4  TASK: holstein
 5 */
 6 #include <cstdio>
 7 #include <cstring>
 8 #include <cmath>
 9 #include <algorithm>
10 using namespace std;
11 int o[21],c[30],p[20][40],t[30],an[21];
12 int main()
13 {
14     int i,j,k,n,m,num,ans;
15     freopen("holstein.in","r",stdin);
16     freopen("holstein.out","w",stdout);
17     scanf("%d",&n);
18     for(i = 1;i <= n;i ++)
19     scanf("%d",&c[i]);
20     scanf("%d",&m);
21     for(i = 1;i <= m;i ++)
22     {
23         for(j = 1;j <= n;j ++)
24         scanf("%d",&p[i][j]);
25     }
26     ans = 10000;
27     for(i = 1;i < (1<<m);i ++)
28     {
29         memset(t,0,sizeof(t));
30         memset(o,0,sizeof(o));
31         num = 0;
32         for(j = 0;j < m;j ++)
33         {
34             if((1<<j)&i)
35             {
36                 o[j+1] = 1;
37                 for(k = 1;k <= n;k ++)
38                 t[k] += p[j+1][k];
39                 num ++;
40             }
41         }
42         for(j = 1;j <= n;j ++)
43         {
44             if(t[j] < c[j]) break;
45         }
46         if(j == n+1)
47         {
48             if(ans > num)
49             {
50                 ans = num;
51                 for(j = 1;j <= m;j ++)
52                 {
53                     an[j] = o[j];
54                 }
55             }
56             else if(ans == num)
57             {
58                 for(j = 1;j <= m;j ++)
59                 {
60                     if(!an[j]&&o[j])
61                     {
62                         for(k = 1;k <= n;k ++)
63                         an[k] = o[k];
64                         break;
65                     }
66                     else if(an[j]&&!o[j])
67                     break;
68                 }
69             }
70         }
71     }
72     printf("%d",ans);
73     for(i = 1;i <= m;i ++)
74     {
75         if(an[i]) printf(" %d",i);
76     }
77     printf("\n");
78     return 0;
79 }
posted @ 2012-11-06 15:14  Naix_x  阅读(136)  评论(0编辑  收藏  举报