【小贪心大智慧】打包 题解

      很经典的贪心。其实贪心策略不难想,但是当我把这道题给同学看时,他们竟然上来就说用搜索…看来什么事也不要总往难里想啊~

 

 

【题目描述】
  某工厂生产出的产品都要被打包放入正四棱柱的盒子内,所有盒子的高度为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)是样例第二行的情况。

 

 

      这道题看起来很麻烦,情况很多,如果用搜索很难实现。我们很可能想到贪心的方法,就是尽量把箱子填满,这样需要的箱子总数最少。

所以这道题的贪心策略如下:

  1. 将所有6*6的盒子全部单独装入箱子(多了也放不下啊~)。
  2. 将所有5*5的盒子全部单独装入箱子,在剩下的11个1*1空间中放尽量多的1*1的盒子。
  3. 将所有4*4的盒子全部单独装入箱子,在剩下的空间中尽可能放2*2的盒子,剩下的用1*1的盒子填满。
  4. 3*3…
  5. 全部放完后,所需要的箱子数就是最优解。

 

(感谢HJY提供题目及思路,转载请注明出处)

posted on 2010-10-09 17:07  saltless  阅读(573)  评论(0编辑  收藏  举报

导航