uva311 - Packets
经典的贪心题目,
先放大的,3x3/4,4x4,5x5,6x6,这些只能占据一个包裹的物品,再放那些小的,,,对于那些小的,先放缝隙,然后在占据新的包裹。
这道以前做过,但是代码太繁琐了,经过精简,代码如下:
#include <cstdio>
int pake[7];
int main ()
{
int n, s, ok, tt;
while(1)
{
ok = 0;
for(int i = 1; i <= 6; i++) {scanf("%d",&pake[i]); ok+=pake[i]; }
if(!ok) break;
n = pake[6]+pake[5]+pake[4]+pake[3]/4;
pake[1]-=pake[5]*11;
pake[2]-=pake[4]*5;
if(tt = pake[3]%4)
{
n+=1;
if(tt==1) pake[1]-=7, pake[2]-=5;
else if(tt==2) pake[1]-=6, pake[2]-=3;
else if(tt==3) pake[1]-=5, pake[2]-=1;
}
if(pake[2]<0)
{
pake[1]+=pake[2]*4;
pake[2] = 0;
}
n+=pake[2]/9;
if(pake[2]%9)
{
n+=1;
pake[1]-=36-(pake[2]%9*4);
}
if(pake[1]>0)
{
n+=pake[1]/36;
if(pake[1]%36) n+=1;
}
printf("%d\n",n);
}
return 0;
}
浙公网安备 33010602011771号