【发布时间】:2013-01-30 20:02:33
【问题描述】:
我一直在尝试解决这个问题的二维变体:Box stacking problem
要注意的是,与原来的不同,同一个框的多个实例是不允许的。当然,您仍然可以旋转 2D 矩形。
还有一个高度限制,所以塔必须小于或等于这个限制。
一个盒子在另一个盒子下方的底边必须大于或等于(严格来说不大于)它。
我一直在尝试应用 LIS 算法,其他限制似乎得到了处理,但我想不出如何解释无重复规则。
所以我的主要问题是,如果您试图最大化堆栈的高度并将其保持在限制以下,您如何解释无重复规则? 谢谢
编辑:
我意识到,如果您为每个项目创建两个可能的旋转,就像您为 3-D 变体所做的那样,这个问题变得非常类似于 0-1 背包问题。由于必须使用此排序列表的子集按顺序构建最佳塔,因此我们必须选择要使用的塔。但是,我仍然不知道如何确保没有重复。解决这个问题有什么帮助吗? 谢谢
编辑 2:
我找到了这个链接:http://courses.csail.mit.edu/6.006/fall10/handouts/recitation11-19.pdf 第 4 页描述了如何解决单实例 3D 最大高度版本,但是我认为这不适用于高度限制版本,因为它会返回每次调用的最大高度。也许这可以修改以适应高度限制?
【问题讨论】:
-
不清楚目标是什么。单个堆栈中低于限制的最多盒子?正常问题表明目标是可能的最高堆栈,但由于我们在这里有一个“限制”,所以目标必须不同。
-
是的,目标仍然是低于高度限制的最高堆栈。
-
@TylerDurden,是的。
标签: algorithm dynamic-programming