自驾游【优先队列】【贪心】

题目描述

小明决定自己开车去旅游。
假设你离景点L单位距离,一开始,你车子的油箱里有P单位的汽油,车每开一单位的距离就需要消耗一单位的汽油。如果在途中车上的汽油耗尽,车就无法继续前行,因而无法到达想去的景点了。
旅途中,一共有N个加油站,每个加油站都可以给车加一定量的汽油。假设车的油箱的容量是无限大的,无论加多少汽油都没有问题,那么请问你是否能到达想去的景点?如果可以,最少需要加多少次油?如果可以到达终点,输出最少的加油次数,否则输出-1。

输入

输入文件为“travel.in”
第一行一个正整数N,表示路上加油站的数量
接下来N行,每行两个正整数Ai和Bi,分别表示加油站距离景点Ai个单位以及最多能给车加Bi单位的汽油 (保证同一点只有一个加油站)
接下来一行包含两个正整数L和P,分别表示你离景点的距离L,以及初始车子油箱的油量P

输出

输出文件为“travel.out”
如果可以到达景点,请输出一个整数,表示最少的加油次数;否则输出-1

样例输入

4
4 4
5 2
11 5
15 10
25 10

样例输出

2
提示
【数据范围】
对于20%的数据:1 <= N <= 100
对于100%的数据:
1 <= N <= 10000,
1 <= Ai < L,1 <= Bi <= 100
1 <= L, P <= 1000000

题解:

题目要求我们加油次数最少,那么假定油量为0时再加油,当然这只是理想状况(因为不可能每个加油站都在你油用完的那个位置),不过我们可以这么想“在到达加油站i时,就获得了一次在之后任何时候都可以加Bi油量的权利”。
①首先我们要根据距离从小到大对每个加油站排序
②这里我们要使用一个优先队列,在经过加油站i时,往优先队列里加入Bi
③当燃料箱空了时:
a.如果队列也是空的,则无法到达终点
b.否则取出优先队列中最大的元素,并用来给卡车加油(因为加油量最多的永远是最优的)

C o d e : Code:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值