渡轮装载问题

时间:2011-08-03 15:06:44

标签: algorithm dynamic-programming greedy

我对下面提到的算法问题有困难:

  

在一个港口有一个三车道渡轮,在它前面有一个N队列   车辆。它们每个都有厘米的指定长度。我们也知道   渡轮的长度(L)。我们必须提出一种能够实现的算法   从队列中装载最多车辆的渡轮。每辆车都可以选择三个车道中的一个:左,中或右。汽车必须按顺序处理 - 对于每辆汽车(从前面开始),我们必须决定它将驶入哪条车道。如果在我们完成的那一刻,没有可用的空间让车辆在队列前面。剩下的车等待下一班渡轮。

贪婪方法(first-fit)在每种情况下都不是最有效的(例如,如果L是5并且我们有队列5 2 2 3 3)。因此,如果我们将其视为动态编程问题,我试图弄清楚解决方案是什么。我仍然试图找到任何,但我知道的所有动态算法(尤其是算法导论)似乎都不适合这个问题。

提前感谢您的任何建议。 :)

1 个答案:

答案 0 :(得分:2)

首先,请注意此问题与knapsack problempartition problembin packing problem之间的相似之处。

这表明伪多项式时间动态编程解决方案。在每个问题中,我们都会跟踪每个尺寸小于我们感兴趣的背包的最佳解决方案。在这种情况下,我们的背包是三个车道。现在我希望算法还没有离你太远。

我不打算给你完整的答案,因为这是来自UVa Online Judge的问题。但是我希望这会让你朝着正确的方向前进。关于如何解决与背包有关的问题,有很多信息。