题目大意:要你求一个食材序列,使得用的食材最少,并且满足奶牛所有维他命需求
思路:一开始感觉神题啊!不会捉!然后无意撇到食材总共15个......暴力大法好
1 /*{ 2 ID:a4298442 3 PROB:holstein 4 LANG:C++ 5 } 6 */ 7 #include<iostream> 8 #include<fstream> 9 #define maxn 500 10 using namespace std; 11 ifstream fin("holstein.in"); 12 ofstream fout("holstein.out"); 13 //#define fin cin 14 //#define fout cout 15 int vitamin[maxn],a[maxn][maxn],ans[maxn],h; 16 int main() 17 { 18 int v,g; 19 fin>>v; 20 for(int i=1;i<=v;i++)fin>>vitamin[i]; 21 fin>>g; 22 for(int i=1;i<=g;i++) 23 { 24 for(int j=1;j<=v;j++)fin>>a[i][j]; 25 } 26 int minx=0x3f3f3f3f,minj=-1; 27 for(int i=0;i<=1LL<<g;i++) 28 { 29 int temp[maxn]={0},cnt=0; 30 for(int j=1,idx=1;j<=i;j<<=1,idx++)if((i&j)!=0) 31 { 32 cnt++; 33 for(int k=1;k<=v;k++) 34 { 35 temp[k]+=a[idx][k]; 36 } 37 } 38 int flag=1; 39 for(int j=1;j<=v;j++)if(temp[j]<vitamin[j]){flag=0;break;} 40 if(flag) 41 { 42 if(cnt<minx) 43 { 44 minx=cnt; 45 minj=i; 46 } 47 } 48 } 49 fout<<minx<<" "; 50 for(int j=1,idx=1;j<=minj;j<<=1,idx++)if((minj&j)!=0) 51 { 52 ans[++h]=idx; 53 } 54 for(int i=1;i<h;i++)fout<<ans[i]<<" "; 55 fout<<ans[h]<<endl; 56 return 0; 57 }