1091: 3007 装箱问题(贪心)

该程序设计问题旨在帮助工厂减少邮寄长方体产品的包裹数量以降低成本。输入包含每种尺寸产品数量,程序通过计算如何最佳地排列产品来确定最小包裹数。例如,考虑2和1的组合以填充空间。程序逐个处理产品,调整剩余空间,并计算所需的最小包裹数。
摘要由CSDN通过智能技术生成

题目描述

一个工厂生产的产品形状都是长方体,高度都是h,主要有1 * 1,2 * 2,3 * 3,4 * 4,5 * 5,6 * 6等6种。这些产品在邮寄时被包装在一个6 * 6 * h的长方体包裹中。由于邮费很贵,工厂希望减小每个订单的包裹数量以增加他们的利润。因此他们需要一个好的程序帮他们解决这个问题。你的任务就是设计这个程序。

输入

输入包括多组测试数据,每一行代表一个订单。每个订单里的一行包括六个整数,用空格隔开,从小到大分别为这6种产品的数量。6个0表示文件结束。

输出

针对每个订单输出一个整数,占一行,代表对应的订单所需的最小包裹数。没有多余的空行。

样例输入 复制

0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0

样例输出 复制

2
1

这个题的思路就是从大到小一个一个算 给2和1留出空位 

#include <iostream>
using namespace std;

void _3007_()
{
    int a, b, c, d, e, f;
    while (1)
    { 
        int h = 0;
        scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f);
        if (a + b + c + d + e + f == 0)break;
        
        //对f
        h += f;

        //对e
        h += e;
        int leftfortwo = 5 * e;
        int leftforone = e;

        //对d
        h += d;
        leftfortwo += 10 * d;

        //对c
        h += (c + 3) / 4;
        if (c % 4 == 1)
        {
            leftfortwo += 13 * ((c + 3) / 4);
            leftforone += (c + 3) / 4;
        }
        else if (c % 4 == 2)
            leftforone += 9 * ((c + 3) / 4);
        else if (c % 4 == 3)
        {
            leftfortwo += 4 * ((c + 3) / 4);
            leftforone += ((c + 3) / 4);
        }

        //对b
        if (b <= leftfortwo)
        {
            leftforone += (leftfortwo - b) * 2;
        }
        else
        {
            h += (b - leftfortwo) / 18 + 1;
        }

        //对a
        if (a > leftforone)
        {
            h += (a - leftforone) / 36 + 1;
        }
        cout << h << endl;
    }

}


int main()
{
    _3007_();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值