文章

13

粉丝

76

获赞

5

访问

7.9k

头像
思路解析与代码实现(相对精简,参考了前辈们的题解)
Kohi VIP
P1347 浙江大学机试题
发布于2024年3月20日 21:18
阅读数 583

已知油箱初始为空,设有 n 个加油站(按距起点由近到远排序,编号 1...n)。则 no.1 必然要在起点,车才能出发。再令终点为 no.n+1。

假设在 no.i 加满油,到达 no. i+1 时,会消耗掉 from i to i+1 这段距离对应的油量,这些油耗只能来自在 no.i 装满的油箱。

如果满油箱也支持不了 from i to i+1 的耗油,那能到的最远距离就是 “no.i 距起点的距离” + “满油箱能走的距离”。

为使花费最小,先用最便宜的油。如果能 from i to i+1,那油箱里的油肯定够用。这些便宜油的花费就是 from i to i+1 的花费。

如果油箱里还有比 i+1 的油更贵的,说明这些之前加的贵油其实没必要加,全部“倒掉”。(也可理解为:退掉未付款的订单)

然后再在 i+1 加满油,向着下一个加油站出发。如是循环,直到抵达终点 no.n+1。

在终点,和在前面的加油站是一样的:用掉已订便宜油,退订贵油,再补满新油。可设 no.n+1 的油价为 0,距离为 D。

(最后退订、补满“虚油”的步骤其实无意义,只是为了操作统一)

简言之, from i to i+1 用掉的油和 no.i+1 无关,只与 no.i 及之前的加油站有关;(也就是说,这是一个马尔可夫过程)

而在 i+1 倒贵油、补新油,是为了  from i+1 to n+1 能用到尽可能便宜的油。

至于 eps = 1.e-8,即 ε = 1.0 * 10 ^ (-8) > 0,是因为浮点数之间的比较受精度误差影响。

IEEE-754 双精度浮点数(double),组成原理中有讲。

#include <bits/stdc++.h>
using namespace std;

typedef pair<double, double> Station;

Station s[5...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发