【发布时间】:2020-11-04 06:46:58
【问题描述】:
如何解决这个问题? 给定一组盒子,要求将这些盒子放在彼此的顶部,以达到可能的最小高度。 除非 X 的 2D 底面积小于或等于 Y 的 2D 底面积,否则不能将框“X”放在另一个框“Y”的顶部。允许旋转任何框以使用任意两个边作为它的基础。它必须只使用每个盒子的一个实例
【问题讨论】:
-
面积还是尺寸?如果是区域,则旋转每个框以使最短的一端向上并按区域排序。如果是尺寸,你会如何处理
(4,4,4)、(5,3,1)和(6,2,2)的框? -
@btilly 我没明白你所说的面积或尺寸是什么意思?无论如何,在您的测试用例中,我们将有这些框和旋转(4,4,4),第二个框(5,3,1)(5,1,3)(3,1,5),第三个框(6 ,2,2) (2,2,6) 所以最优解是 7 => (4,4,4) 然后 (5,3,1) 然后 (6,2,2)
-
我认为@btilly 的意思是,这是一个书面的微不足道的问题,但如果有一个限制,如果一个盒子只能放在另一个盒子的顶部,那么它的表面就更难了包含在下面框的表面中。在示例中,将 5x3 表面置于 4x4 表面之上,违反了这一点。
-
@Dave,非常感谢!如果我们有 box1 (9,3,6), box2 (2,3,7), box3 (6 ,4,10),答案是 box3,底数为 6*10,高度为 4,然后是 box1,底数为 6*9,高度为 3,然后是 box2,底数为 3*7,高度为 2 .. 让我感到困惑的是问题的陈述他写了“区域”,我第一次想到它类似于 box stacking 著名的 DP 问题
标签: algorithm dynamic-programming