poj 2431加油站问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40924940/article/details/79143634

题目描述大概是这样的:

你开一辆汽车,已知车内的油箱是无限大的,初始有一定油量P,也已知你要走距离为L,而路上有N个加油站,每个加油站距离你初始位置的距离已知为 A[i],其中含有油量为 B[i], 那么你的问题就是如何在加油尽可能少的情况下走完全程,如果走不完输出  -1  ,反之输出你加油的次数。


关键字: 贪心,优先队列;

由于这是第一篇文章,所以大概叙述下这个博客的创作思路:

                为了防止思维江化(-1s),所有的题解 ,并不会直接写出代码,只会提供思路 以及尽可能多的测试数据,避免太过依赖以前的思路。


中心思想:

            这题我们目的是想尽可能少的加油,那么,比较喜欢出现的状况就是 ,加油站油多,而且我们能在油箱快没的时候加上,但是很明显,加油站是固定的,如果我们不在那里加油,那么就错过去了。

            可是,不妨想一下:如果我刚路过加油站就把这些油加上,和我油箱已经没了再把油加上,走的距离是不是相等?

 有了猜想我们来实践:

           目前有油 10L 走10km 然后假设突然见到加油站,补充油5L 又走了5km 合计 15km(当然现实里这显然不可能)

           假若我目前10L油,我足够深谋远虑,提前先加5L油 结果仍然是走了 15km。

假设是成立的,所以,这题的关键,在于把每个加油站看做我们可以携带的   “油桶”    ,只要需要,我们随时去补一下,而且我们只去补最大的那桶,但原题测试数据太过庞大,所以    优先队列  是解决问题的一个关键,根据这个特性,我们不断将  “  油桶  ”  放入队列,需要时再取出,便可做到加油次数最少。

以下提供一些 AC代码的测试数据 ,仅供参考:

10
15 20
14 22
10 21
1 5
6 13
25 41
26 33
9 9
7 7
6 4
35 25
1
2
1 10
15 1
17 5
-1
3
1 1
2 2
3 3
4 1
1
3
1 2
2 0
3 0
4 1
-1
4
1 3
2 6
3 0
5 8
10 1
-1



猜你喜欢

转载自blog.csdn.net/qq_40924940/article/details/79143634