工厂生产的产品包装在相同高度h,尺寸为1 * 1,2 * 2,3 * 3,4 * 4,5 * 5,6 * 6的方形包装中。 这些产品始终以与产品高度相同的尺寸为6 * 6的包裹交付给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。
输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空格隔开,分别为 1*1 至 6*6 这六种产品的数量。输入文件将以 6 个 0 组成的一行结尾。
除了输入的最后一行 6 个 0 以外,输入文件里每一行对应着输出文件的一行,每一行输出一个整数代表对应的订单所需的最小包裹数。
0 0 4 0 0 1 7 5 1 0 0 0 0 0 0 0 0 0
2 1
num[0] = max(0,num[0]-9*num[-2])3. 对于 4*4 的,有些复杂。先统计数目,再拿 2*2 的凑,如果出现凑不够的情况,就在从 1*1 里面选。对应代码:
num[0] = max(0,num[0]-4*(5*num[3]-num[1]))4. 只剩下3*3,2*2和1*1的包裹了,此时不必讨论,直接算余下的包裹总面积,除以 6*6 即可。向上取整就行。
import sys import math def solve(num): res =sum(num[-3:]) num[0] = max(0,num[0]-9*num[-2]) if num[1]<5*num[3]: num[0] = max(0,num[0]-4*(5*num[3]-num[1])) num[1]=0 else: num[1] -= 5*num[3] k = num[0]+4*num[1]+9*num[2] res += int(math.ceil(k/36.0)) return res if __name__=='__main__': for line in sys.stdin.readlines(): temp = list(map(int,line.split())) if temp == [0]*len(temp): break print(solve(temp))