POJ 1017 贪心

8 篇文章 0 订阅
7 篇文章 0 订阅

装箱问题

究极特判,直接看代码

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;

int s1, s2, s3, s4, s5, s6;

int main() {
    while(scanf("%d%d%d%d%d%d", &s1, &s2, &s3, &s4, &s5, &s6), !(s1 == 0 && s2 == 0 && s3 == 0 && s4 == 0 && s5 == 0 && s6 == 0)) {
        int ans = 0;
        ans += s6;
        s6 = 0;
        //printf("box now 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d\n", s1, s2, s3, s4, s5, s6);

        ans += s5;
        if (11 * s5 < s1)
            s1 -= 11 * s5;
        else
            s1 = 0;
        s5 = 0;
        //printf("box now 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d\n", s1, s2, s3, s4, s5, s6);

        ans += s4;
        if (5 * s4 < s2)
            s2 -= 5 * s4;
        else {
            int last = 5 * s4 - s2;
            s2 = 0;
            if (last * 4 < s1)
                s1 -= last * 4;
            else
                s1 = 0;
        }
        s4 = 0;
        //printf("box now 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d\n", s1, s2, s3, s4, s5, s6);

        ans += s3 / 4 + (s3 % 4 != 0);
        if (s3 % 4 != 0) {
            int last = 4 - s3 % 4, use;
            if (last == 3) {
                if (5 < s2) {
                    s2 -= 5;
                    use = 5;
                }
                else {
                    use = s2;
                    s2 = 0;
                }
            }
            else if (last == 2) {
                if (3 < s2) {
                    s2 -= 3;
                    use = 3;
                }
                else {
                    use = s2;
                    s2 = 0;
                }
            }
            else {
                if (1 < s2) {
                    s2 -= 1;
                    use = 1;
                }
                else {
                    use = s2;
                    s2 = 0;
                }
            }
            last = last * 9 - use * 4;
            if (last < s1)
                s1 -= last;
            else
                s1 = 0;
        }
        s3 = 0;
        //printf("box now 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d\n", s1, s2, s3, s4, s5, s6);

        ans += s2 / 9 + (s2 % 9 != 0);
        if (s2 % 9 != 0) {
            int last = (9 - s2 % 9) * 4;
            if (last < s1)
                s1 -= last;
            else
                s1 = 0;
        }
        s2 = 0;
        //printf("box now 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d\n", s1, s2, s3, s4, s5, s6);

        ans += s1 / 36 + (s1 % 36 != 0);

        printf("%d\n", ans);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值