问题:
我们想用卡车从一个位置到另一个距离它有 D (D <= 1,000,000,000) 个单位的位置。卡车最多可容纳 G (G < 1,000,000) 个单位的燃料,并且在 1 个单位距离内消耗 1 个单位的燃料。沿途有 N (N <= 50,000) 个加油站。每个站点 i 距离起点有 X_i 个单位,每单位燃料的价格为 Y_i (Y_i <= 1,000,000)。我们以 B 单位的燃料开始旅程。到达目的地的最低成本方式是什么?
(来自 USACO 过去比赛的实际问题陈述)
我的算法:
设 F[i] = 到达加油站 i 所需的最低成本,第 N+1 个加油站为目的地。
假设 k 是我们到达 i 之前的最后一个加油站F[i] = F[k] + Y_k * (X_i-X_k)
。我们对所有的 k < i 都尝试这个,这样X_i-X_k < D
并取最小值。
F[N+1] 将是最终答案。
该算法存在的问题:
1. 需要 O(N 2 ) 时间,不会在 2 秒的时间限制内运行。
2.它没有考虑我们到达加油站k的情况,其中已经有m个单位的燃料,我们只填充X_i-X_k-m个单位的燃料才能到达i。
我该如何克服这些问题?