这是用dfs写出来的,照样调试用了很多时间,有待加强啊!!下面贴出代码,以作纪念。

View Code
 1 /*{
 2 ID:jzy3209981
 3 PROG:holstein
 4 LANG:C++
 5 }*/
 6 #include<stdio.h>
 7 #include<iostream>
 8 #include<string.h>
 9 #include<math.h>
10 using namespace std;
11 
12 int scoop[15][25];
13 int vitamin[25];
14 int minn;
15 int order[15];
16 int ord[15];
17 void dfs(int a,int v,int g,int n,int ori[25])
18 {
19     
20     int copy[25];
21     int i,j,state;
22     if(a>=g)
23         return ;
24     for(i=a;i<g;i++)
25     {
26         memcpy(copy,ori,25*sizeof(int));
27         state=0;
28         ord[n]=i;
29         for(j=0;j<v;j++)
30         {
31             copy[j]-=scoop[i][j];
32             if(copy[j]>0)
33                 state=1;        
34         }    
35 
36         if(state==0)
37         {
38             if(n+1<minn)
39             {
40                 minn=n+1;
41                 memcpy(order,ord,15*sizeof(int));
42             }
43         }        
44         dfs(i+1,v,g,n+1,copy);
45     }
46 }
47 
48 int main()
49 {
50     freopen ("holstein.in","r",stdin);
51     freopen ("holstein.out","w",stdout);
52     int v,i,g,j;
53     minn=15;
54     scanf("%d",&v);
55     for(i=0;i<v;i++)
56         scanf("%d",&vitamin[i]);
57     scanf("%d",&g);
58     for(i=0;i<g;i++)
59         for(j=0;j<v;j++)
60             scanf("%d",&scoop[i][j]);
61     dfs(0,v,g,0,vitamin);
62     printf("%d ",minn);
63     for(i=0;i<minn;i++)
64     {
65         if(i==minn-1)
66             printf("%d\n",order[i]+1);
67         else
68             printf("%d ",order[i]+1);
69     }
70     return 0;
71 }

 

posted on 2012-07-21 21:02  醉春雨  阅读(129)  评论(0)    收藏  举报