[编程题]包裹运输(装箱问题)

这是一道编程题,涉及如何将工厂生产的不同尺寸产品高效地装入6 * 6的包裹中,以减少每个订单的包裹数量,降低运输成本。你需要设计一个程序来解决这个问题。

时间限制:1秒

空间限制:16384K

工厂生产的产品包装在相同高度h,尺寸为1 * 1,2 * 2,3 * 3,4 * 4,5 * 5,6 * 6的方形包装中。 这些产品始终以与产品高度相同的尺寸为6 * 6的包裹交付给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。

输入描述:

输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空格隔开,分别为 1*1 至 6*6 这六种产品的数量。输入文件将以 6 个 0 组成的一行结尾。

输出描述:

除了输入的最后一行 6 个 0 以外,输入文件里每一行对应着输出文件的一行,每一行输出一个整数代表对应的订单所需的最小包裹数。

输入例子1:

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

输出例子1:

2
1

 

N = 6
data = [0] + [int(x) for x in raw_input().split(' ')[:N]]

while(sum(data) != 0):
    area = [i*i*data[i] for i in range(2,N+1)]
    total_areas = sum(area)
    count = 0
    count = data[6]+data[5]+data[4]+(data[3]+3)/4
    data[2] = max(0, data[2]-data[4]*5)

    
    data[3] = data[3]%4
    use_two = [9, 5, 3, 1, 0]
    if data[3] > 0:
        data[2] = max(0, data[2]-use_two[data[3]])


    if data[2] > 0:
        count += (data[2]+8)/9
    res = count*36-total_areas

    if data[1] > res:
        data[1] = max(0, data[1] - res)
        count += (data[1]+35)/36
    print count
    data = [0] + [int(x) for x in raw_input().split(' ')[:N]]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值