2

问题:
我们想用卡车从一个位置到另一个距离它有 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。

我该如何克服这些问题?

4

1 回答 1

1

The contest has official solutions published for all 9 problems:

http://www.usaco.org/index.php?page=open13problems

于 2013-09-08T08:00:50.680 回答