装包问题。 题意:某公司生产的产品有6种,而只有6*6的箱子可以装。求使用最少的箱子,将产品包装。 思路:按大到小的顺序装,尽量使每个箱子装满! #include<iostream> #include<cstdio> #include<cstring> using namespace std; int a[8]; int main() { int all,i,time,square; while(1) { all=0; for(i=1;i<=6;i++) { cin>>a[i];all+=a[i]; } if(all==0) break; time =0; time+=a[6]; time+=a[5]; square=a[5]*11; if(a[1]>=square) a[1]-=square; else a[1]=0; time+=a[4]; square=a[4]*20; if(a[2]>=a[4]*5){ a[2]-=a[4]*5; square=0;} else { square-=a[2]*4;a[2]=0;} if(a[1]>=square) a[1]-=square; else a[1]=0; if(a[3]>=4) { time+=a[3]/4; a[3]%=4; } if(a[3]==3) { time++;square=9; if(a[2]>0) { a[2]--;square-=4;} if(a[1]>=square) a[1]-=square; else a[1]=0; } else if(a[3]==2) { time++;square=18; if(a[2]>=3) { square=6;a[2]-=3;} else { square-=a[2]*4; a[2]=0;} if(a[1]>=square) a[1]-=square; else a[1]=0; } else if(a[3]==1) { time++;square=27; if(a[2]>=5) { square=7;a[2]-=5;} else { square-=a[2]*4;a[2]=0;} if(a[1]>=square ) a[1]-=square; else a[1]=0; } if(a[2]>0) { time+=a[2]/9; a[2]%=9; if(a[2]>0) { time++;square=36-a[2]*4; if(a[1]>=square) a[1]-=square; else a[1]=0; } } if(a[1]>0) { time+=a[1]/36; a[1]%=36; if(a[1]>0) { time++; } } cout<<time<<endl; } return 0; }