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; }