堆叠框算法

我试图解决这个问题有点困难.混淆的主要原因是不知道何时拆除箱子.

这是我的方法:

我逐列查看容器列.如果原点框的最顶部框是空的并且目标框不为空,那么我知道要添加该框.我知道如果反之亦然,将移除顶盒.我认为当两个位置都有一个盒子但是不同时我必须交换.但是我的问题是在某些情况下,在底部移除一个盒子会使一切都向下移动并使其更像目的地盒子.或者可以在中心移除一个或移除两个,一个在底部,一个在中心.我如何知道何时取出盒子?我可以删除所有组合,看看哪个组合最接近目的地,但这似乎并不高效.

我也许也认为这是一个明显的动态编程问题,这个问题已经过去了.任何帮助,将不胜感激

最佳答案 您已经将问题简化为一次考虑一列,所以让我们从此开始.

我们不是考虑列中可能发生的特定操作,而是让我们一般地看一下这个过程.
最初,我们有给定的列.
最后,我们得到了结果列.
结果列中给定列的剩余部分是什么?
它是给定列的一个子序列(因为我们可以从任何地方删除一个盒子),它转移到结果列的前缀(“prefix”在“位于底部”,因为我们只能在顶部添加新盒子什么是最初的).

当然,我们希望最大化此序列的长度(子序列或前缀,具体取决于您查看的位置).
这看起来像一个动态编程问题,类似于edit distancelongest common subsequence.
也许你会想从这一点自己解决细节问题.
祝好运!

点赞