【发布时间】:2015-04-04 03:31:09
【问题描述】:
给定 N 个点在一条与原点有一定距离的直线上。我们还提供了我们需要到达的终点。现在到第 i 点,我们应该有 X[i] 的能量,并且那个点将给 Y[i] 的利润作为被添加的能量。现在我们需要找出从起点开始到达目的地点的最小能量。
示例: 让我们有 5 个点,目标点距离原点 10 个单位。
那么让我们说第一个点是距离 origin 1 个单位,需要 2 个单位的能量并产生 3 个单位的利润。
第二个点距离原点 2 个单位,需要 3 个单位的能量,利润为 0 个单位。
第三点距离原点 4 个单位,需要 3 个单位的能量并获得 5 个单位的利润。
第四点距离原点 8 个单位,需要 5 个单位的能量,利润为 0 个单位。
第五点距离原点 9 个单位,需要 1 个单位的能量并获得 2 个单位的利润。
现在这个配置的答案是 6。
解释:
因为如果我们从 5 个单位的能量开始,那么
在点 1,我们有超过或等于 2 个单位的能量,因此利润 1 添加到能量中,总能量为 6。
在第 2 点,三个单位的能量将消失,而 3 只剩下 3 个单位。
在第 3 点,由于能量正好是 3,利润将被添加,总能量变为 5。
在第 4 点,所有 5 个单位都将消失,我们无法继续前进
同样,如果我们从 6 开始,其中一个将能够通过点 4 并到达点 4,它会增加一个单位的能量,我们将到达目的地
现在我们要找到开始到达最终目的地所需的最小能量。
【问题讨论】:
-
(1) 回到源头每次迭代消耗 0 能量? (2) 我们可以重游某个目的地吗?
-
@amit 不,你只能通过每个点前进
-
@amit 你不需要回到源头,从你访问的最新点继续
-
我真的不明白这个问题,所有节点都在一维线上?能源的成本是“进入”一个点,而不是“旅行”它?
-
如果你从零开始,答案不就是减去你在路径中的小部分吗?
标签: algorithm dynamic-programming