描述:
装箱问题,利用贪心的思想,从最大的开始装 ,6×6,5×5和4×4的每个都需要一个箱子
3*3的每四个可用一个箱子,剩下开始装2*2,最后开始装1*1
#include<cstdio>
int main(){
int p1,p2,p3,p4,p5,p6;
int minbox;
int map[4]={0,5,3,1}; //映射装3*3余下可以装2*2的多少个
while(scanf("%d %d %d %d %d %d",&p1,&p2,&p3,&p4,&p5,&p6))
{
if((p1+p2+p3+p4+p5+p6)==0) break;
minbox=p6+p5+p4+(p3+3)/4;
int need2=p4*5+map[p3%4]; //需要2*2的个数
if(need2<p2)
minbox+=(p2-need2+8)/9; //如果多余则放到新的箱子
int need1=minbox*36-p6*36-p5*25-p4*16-p3*9-p2*4;
if(need1<p1) //需要1*1的个数
minbox+=(p1-need1+35)/36;
printf("%d\n",minbox);
}
return 0;
}