题意:
一个工厂制造的产品形状都是长方体盒子,它们的高度都是 h,长和宽都相等,一共有六个型号,分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。
这些产品通常使用一个 6*6*h 的长方体箱子包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的箱子数量BoxNum。
由于盒子和箱子的高均为h,因此只需考虑底面积的空间。
6*6的盒子,每个盒子独占一个箱子。
5*5的盒子,每个盒子放入一个箱子,该箱子的剩余空间允许放入的最大尺寸为1*1,且最多放11个。
4*4的盒子,每个盒子放入一个箱子,该箱子的剩余空间允许放入的最大尺寸为2*2。
3*3的盒子,每4个刚好独占一个箱子,不足4个3*3的,剩下空间由2*2和1*1填充。
2*2的盒子和1*1的盒子主要用于填充其他箱子的剩余空间,填充后的多余部分才开辟新箱子装填。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define LL long long
#define MOD 100000009;
#define EPS 10e-8
using namespace std;
int main()
{
int res;
int num[4] = {0,5,3,1};
int pac[7];
while(1)
{
for(int i = 1; i<=6; i++)
cin>>pac[i];
if(pac[1]==0 && pac[2]==0 && pac[3]==0
&& pac[4]==0 && pac[5]==0 && pac[6]==0)
break;
res = pac[6]+pac[5]+pac[4] + (pac[3]+3)/4;
int a1,a2;
a2 = pac[4]*5 + num[pac[3]%4];
if (pac[2]>a2)
res +=(pac[2]-a2+8)/9;
a1 = res*36 -pac[6]*36 - pac[5]*25 -pac[4]*16
- pac[3] *9 - pac[2] * 4;
if(pac[1]>a1)
res += (pac[1]-a1+35)/36;
cout<<res<<endl;
}
return 0;
}