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


你可能感兴趣的:(uva311 - Packets)