题目大意:
现有1*1,2*2,3*3,4*4,5*5,6*6规格的产品若干个(高度都为h),问最少需要多少个
6*6*h的箱子把这些产品都装完
输入:每组测试数据共6个整数,分别代表1*1,...6*6这些产品的数量
思路:
细心模拟就好
具体代码如:
/* 6*6的产品独占一个箱子 5*5产品需要一个箱子来装,剩下的空间只能用1*1的填充,且最多11个 4*4产品需要一个箱子来装,剩下的空间可用5个2*2的填满,不足再用1*1的填 4个3*3产品需要一个箱子来装,不足的用1*1,2*2填 */ #include<iostream> #include<cstdio> using namespace std; int a,b,c,d,e,f; int main() { freopen("in.txt","r",stdin); while(scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f)!=EOF) { int sum = 0; if((a+b+c+d+e+f)==0) break; sum=f+e+d;//4*4,5*5,6*6肯定都得要一个箱子才能装 //c=1,2,3,4时都要一个箱子 sum+=(c+3)/4;//3*3每四个装满一个箱子,不足四个也需要一个箱子,剩下的空间用1*1,2*2的填充 //把1*1的箱子放到装5*5的箱子,计算出剩余的数量 a = max(0,a-11*e); //把2*2的箱子放到装4*4的箱子,计算出剩余的数量 b = b-d*5; if(b<0)//说明4*4的箱子装完2*2的产品后还有余 { //2*2的产品相当于4个1*1的 a = a+4*b; } else//2*2的产品还有余,填充到放3*3箱子 { //根据3*3的数量,计算出剩余空间可放多少个1*1和2*2的产品 if(c%4==1) { a = a-7; b=b-5; } else if(c%4==2) { a = a-6; b = b-3; } else if(c%4==3) { b = b -1; a=a-5; } if(b>0)//b还是大于0,另外加箱子放2*2的 { int counts = (b+8)/9; sum+=counts; int num = 36 - (b%9)*4; a = a-num; } else a = a+b*4; } if(a>0) sum=sum+(a+35)/36; printf("%d ",sum); } }