【小贪心大智慧】打包 题解
很经典的贪心。其实贪心策略不难想,但是当我把这道题给同学看时,他们竟然上来就说用搜索…看来什么事也不要总往难里想啊~
【题目描述】
某工厂生产出的产品都要被打包放入正四棱柱的盒子内,所有盒子的高度为h,但底面尺寸不同,可以为1x1、2x2、3x3、4x4、5x5、6x6。如下图所示。
这些盒子将被放入高度为h,底面尺寸为6x6的箱子中。为了降低运送成本,工厂希望尽量减少箱子的数量。如果有一个好算法,能使箱子的数量降到最低,这将给工厂节省不少的资金。请你写一个这样的程序。
【输入格式】
一行6个正整数(<=100000),分别表示底面尺寸分别为 1x1、2x2、3x3、4x4、5x5、6x6的盒子的数量。
【输出格式】
一个整数,表示箱子的数量。
【样例输入】
3 2 1 1 1 1
7 5 1 0 0 0
0 0 0 0 0 0
【样例输出】
4
1
0
【注释】
(a)表示将箱子分别放满3*3和6*6的盒子的情况,(b)是样例第二行的情况。
这道题看起来很麻烦,情况很多,如果用搜索很难实现。我们很可能想到贪心的方法,就是尽量把箱子填满,这样需要的箱子总数最少。
所以这道题的贪心策略如下:
- 将所有6*6的盒子全部单独装入箱子(多了也放不下啊~)。
- 将所有5*5的盒子全部单独装入箱子,在剩下的11个1*1空间中放尽量多的1*1的盒子。
- 将所有4*4的盒子全部单独装入箱子,在剩下的空间中尽可能放2*2的盒子,剩下的用1*1的盒子填满。
- 3*3…
- 全部放完后,所需要的箱子数就是最优解。
(感谢HJY提供题目及思路,转载请注明出处)