这是用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 }

浙公网安备 33010602011771号