【发布时间】:2017-11-22 05:44:46
【问题描述】:
我尝试解决一个声称可以仅使用动态编程解决的问题。以下是问题。 一个人的总能量为 H,他需要走完距离 D。他想在最短的时间内用最大的能量走完这段距离。他可以在 5 种模式下运行。根据 5 种模式中的一种,每公里跑完总距离。 这五种模式使用两个排序的数组来描述
时间:-'5m 10sec', '6 m 11sec','7 m 7sec','8 m 11sec','9 m 11sec'
所需能量:-11,9,8,7,6
所以我的贪婪解决策略是
- 计算 x=H/D 的地板
-
使用耗时最少且需要能量的模式运行下一公里
&设置H=模式所需的H-能量
设置 D=D-1
转到第 1 步,直到剩余距离变为 0。
- 答案将是每公里的所有时间。
我认为这个解决方案会奏效,但实际上却失败了。我知道如何使用 DP 解决它,但我想知道它在哪里失败。我尝试了很多例子,但没有得到感觉。我不完全记得上面两个数组元素,但它们必须按排序顺序。
【问题讨论】:
-
您为什么希望它能够工作?试着证明你的算法应该有效,你会发现你的逻辑在某处有漏洞。
-
好吧,对于你的算法,你现在甚至需要循环 - 答案是 (time: where max(E): E 最小和(所有模式的最小模式能量)*DL >= HL”的模式。需要“(所有模式的最小模式能量)*DL >= HL”来防止在 H=12、D=2 和第一步是 H=11 等情况下没有解决方案。
-
你试过调试器了吗?
-
您的
x有一个错误的假设,即对于每单位公里,您只能选择最多具有平均总能量的模式。这不是真的,考虑 H = 8,D = 4,有两种模式 (1, 10), (5, 1)。 x 为 2,因此您永远无法选择模式 2,因此您将使用 40 秒和 4 能量,而最佳策略是模式 1 跑 3 公里和模式 2 跑 1 公里,总共提供 31 秒和 8 能量 -
@shole 不,看我的逻辑,我在每一步都更新 D 和 H。所以对于最后一公里 H=5,D=1 和 x=5,所以算法会为最后一公里选择第二种模式。
标签: algorithm dynamic-programming greedy