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