我对下面提到的算法问题有困难:
在一个港口有一个三车道渡轮,在它前面有一个N队列 车辆。它们每个都有厘米的指定长度。我们也知道 渡轮的长度(L)。我们必须提出一种能够实现的算法 从队列中装载最多车辆的渡轮。每辆车都可以选择三个车道中的一个:左,中或右。汽车必须按顺序处理 - 对于每辆汽车(从前面开始),我们必须决定它将驶入哪条车道。如果在我们完成的那一刻,没有可用的空间让车辆在队列前面。剩下的车等待下一班渡轮。
贪婪方法(first-fit)在每种情况下都不是最有效的(例如,如果L是5并且我们有队列5 2 2 3 3)。因此,如果我们将其视为动态编程问题,我试图弄清楚解决方案是什么。我仍然试图找到任何,但我知道的所有动态算法(尤其是算法导论)似乎都不适合这个问题。
提前感谢您的任何建议。 :)
答案 0 :(得分:2)
首先,请注意此问题与knapsack problem,partition problem和bin packing problem之间的相似之处。
这表明伪多项式时间动态编程解决方案。在每个问题中,我们都会跟踪每个尺寸小于我们感兴趣的背包的最佳解决方案。在这种情况下,我们的背包是三个车道。现在我希望算法还没有离你太远。
我不打算给你完整的答案,因为这是来自UVa Online Judge的问题。但是我希望这会让你朝着正确的方向前进。关于如何解决与背包有关的问题,有很多信息。