文章
13
粉丝
76
获赞
5
访问
7.9k
已知油箱初始为空,设有 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...
登录后发布评论
暂无评论,来抢沙发