POJ 1017(Packets)

题目链接:http://poj.org/problem?id=1017

题意:装箱问题;

思路:这道题比较简单,思路也是很明确的,就是要注意“取上界”的问题;

ac代码:

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

int main(void){    
    int a,b,c,d,e,f;
    int n=0,m=0;
    while(1){
        scanf("%d %d %d %d %d %d",&a, &b, &c, &d, &e, &f);
        if(a==0 && b==0 && c==0 && d==0 && e==0 && f==0)
            break;
        // 只有 1*1 和 2*2 能做填充物
        n=f+e+d+(int)(c+3)/4;
        m=5*d;
        if(c%4==3)    m++;
        if(c%4==2)    m+=3;
        if(c%4==1)    m+=5;

        if(m<b)        n+=((b-m)+8)/9;

        int s=36*n- 36*f - 25*e - 16*d - 9*c - 4*b;
        if(s<a)        n+=(a-s+35)/36;

        cout<<n<<endl;
    }

    return 0;
}
View Code