使用堆垛箱建造的最高塔

时间:2011-11-29 11:08:49

标签: dynamic-programming

我想解决的问题叫做盒子堆叠。这是描述: 盒子堆叠

您将获得一组n种类型的矩形3-D盒子,其中第i个盒子具有高度h(i),宽度w(i)和深度d(i)(所有实数)。你想要创建一个尽可能高的盒子堆叠,但如果下盒子的2-D底座的尺寸都严格大于2的盒子,你只能在另一个盒子的顶部堆叠一个盒子。高架子的D基座。当然,您可以旋转一个框,以便任何一侧作为其基础。也允许使用相同类型的盒子的多个实例。

我想到了以下解决方案: 让一个框表示为(h,w,d)。 然后我们可以表示所有框的序列,如(h1,w1,d1),(h2,w2,d2),(h3,w3,d3)。 为了照顾我们可以使用任何旋转的部分,使用上面的顺序,我会 生成块的所有可能的排列。因此,对于像(7,1,2)这样的块,将有6个生成的配置。 为了解决这个问题,我计划首先根据宽度按顺序对盒子进行排序。 然后,我会得到一系列的盒子 (h1,w1,d1),(h2,w2,d2)等 然后我使用类似于最长描述子序列的概念来解决问题 让LDS(i)成为在i处结束的最长的递减子序列 然后 LDS(i)= {max [LDS(k)] + kwi和dk的高度i> di}

有没有人看到上述错误?

如果上述解决方案正确,请告诉我

1 个答案:

答案 0 :(得分:0)

您的解决方案似乎与此类似:http://www.geeksforgeeks.org/dynamic-programming-set-21-box-stacking-problem/

但最后一句话似乎不清楚/不准确。您只比较一个维度。