2. 装箱问题
Wrong Answer
30 分
时间限制: 1000ms
空间限制: 131072kB
题目描述
约定:所有数据范围均在int类型内。
一个工厂制造的产品形状都是长方体,他们的高度都是h,长和宽都相等,一共有6个型号,他们的长宽尺寸表示分别为 1*1,2*2,3*3,4*4,5*5,6*6。这些产品通常要使用一个6*6*h的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂想要减小每个订单运送时的包裹数量。需要你编写一个程序帮他们解决这个问题。
输入:包括几行,每一行代表一个订单。每个订单里包括6个整数,分别表示1*1到6*6这6种产品的数量。输入6个0表示结束。
输出:每行输出一个整数,对应订单所需的最小包裹数。
样例输入:
0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0
样例输出:
2
1
赠送WA测试点*1
输入
906 129 114 975 786 962
544 755 147 504 164 552
224 188 220 767 921 490
681 610 979 722 197 367
477 432 757 186 980 304
82 801 817 39 251 292
466 294 797 68 535 744
413 834 101 486 509 315
272 833 565 307 180 728
0 0 0 0 0 0
预期输出
2752
1257
2233
1531
1660
854
1547
1336
1357
实际输出
2752
1257
2233
1531
1660
853
1547
1336
1357
#include<bits/stdc++.h>
//#define int long long
using namespace std;
int hz[7];//1~6
void solve(){
memset(hz,0,sizeof(hz));
for(int i=1;i<=6;i++) cin>>hz[i];
if(hz[1]==0&&hz[2]==0&&hz[3]==0&&hz[4]==0&&hz[5]==0&&hz[6]==0) exit(0);
int ans=0;
ans+=hz[6];
ans+=hz[5];
hz[1]-=min(hz[1],hz[5]*11);
ans+=hz[4];
if(hz[4]*5<=hz[2]) hz[2]-=hz[4]*5;
else{
int sy=hz[4]*5-hz[2];
hz[2]=0;
sy*=4;
hz[1]-=min(sy,hz[1]);
}
ans+=hz[3]/4;
hz[3]%=4;
if(hz[3]==1){
ans++;
if(hz[2]>=6){
hz[2]-=6;
hz[1]-=min(hz[1],7);
}
else{
int sy=27;
sy-=hz[2]*4;
hz[2]=0;
hz[1]-=min(sy,hz[1]);
}
}
else if(hz[3]==2){
ans++;
if(hz[2]>=3){
hz[2]-=3;
hz[1]-=min(6,hz[1]);
}
else{
int sy=18;
sy-=hz[2]*4;
hz[2]=0;
hz[1]-=min(hz[1],sy);
}
}
else if(hz[3]==3){
ans++;
if(hz[2]>=1){
hz[2]-=1;
hz[1]-=min(5,hz[1]);
}
else{
int sy=9;
sy-=hz[2]*4;
hz[2]=0;
hz[1]-=min(sy,hz[1]);
}
}
if(hz[2]>0){
ans+=hz[2]/9;
hz[2]%=9;
int sy=36-4*hz[2];
hz[1]-=min(hz[1],sy);
}
if(hz[1]>0) ans+=ceil(1.0*hz[1]/36);
cout<<ans<<endl;
}
signed main(){
while(true) solve();
return 0;
}
非常感谢愿意帮我改的dalao