poj1017

又是贪心,有点思路,但比较乱,还不知道怎么写,看了题解,感觉自己基本是个废人了

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n,a,b,c,d,e,f,g,x,y;
int u[4]={0,5,3,1};//3*3的物品%4后余项为0,1,2,3的数组,就是还能放几个2*2
int main()
{
    while(~scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f))
    {
        if(!a&&!b&&!c&&!d&&!e&&!f&&!g) break;
        n=f+e+d+(c+3)/4;//(c+3)/4,很厉害的技巧,这是精髓
        y=d*5+u[c%4];//能插空的2*2东西个数
        if(b>y) n+=((b-y)+8)/9;//多了再加箱子
        x=n*36-f*36-e*25-d*16-c*9-b*4;//能插空的1*1的物品个数
        if(x<a) n+=(a-x+35)/36;//不够再加
        printf("%d\n",n);
    }
    return 0;
}

 

posted on 2017-04-01 11:29  发牌员  阅读(115)  评论(0)    收藏  举报

导航