贪心算法—Problem R

题意
一个工厂制造的产品形状都是长方体盒子,它们的高度都是 h,长和宽都相等,一共有六个型号,分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体箱子包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的箱子数量BoxNum。
解题思路
由于盒子和箱子的高均为h,因此只需考虑底面积的空间。
6*6的盒子,每个盒子独占一个箱子。
5*5的盒子,每个盒子放入一个箱子,该箱子的剩余空间允许放入的最大尺寸为1*1,且最多放11个。
4*4的盒子,每个盒子放入一个箱子,该箱子的剩余空间允许放入的最大尺寸为2*2。
3*3的盒子,每4个刚好独占一个箱子,不足4个3*3的,剩下空间由2*2和1*2填充。
2*2的盒子和1*1的盒子主要用于填充其他箱子的剩余空间,填充后的多余部分才开辟新箱子装填。
感想
典型的贪心算法,结合数学空间几何,还好标记了标准尺寸,否则难度恐怕更大···
AC代码

#include<iostream>
#include<cstring>
using namespace std;

int main()
{
    int num[4]={0,5,3,1};
    int box[7];
    while(1)
    {
        int tmp=0;
        int sum=0;
        for(int i=1;i<=6;i++)
        {
            cin>>box[i];    // 读入每个物品的数目
            tmp+=box[i];
        }
        if(tmp==0)  break;
        sum=box[6]+box[5]+box[4]+(box[3]+3)/4;  //a6,a5,a4,每个物品占有一个箱子(a3+3)/4代表a3的物品需要占用的
        int a2=box[4]*5+num[box[3]%4];  //统计所有的大物品放进箱子中后a2物品的空位子有多少
        if(box[2]>a2)
            sum+=(box[2]-a2+8)/9;
        int a1=sum*36-box[6]*36-box[5]*25-box[4]*16-box[3]*9-box[2]*4;
        if(box[1]>a1)   //求a1的空位子,只需要统计剩余的面积即可
            sum+=(box[1]-a1+35)/36;
        cout<<sum<<endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦茶子12138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值