练习题 No.15 Expedition
来源:互联网 发布:java socket链接不上 编辑:程序博客网 时间:2024/06/02 06:32
要求
你需要驾驶一辆卡车行驶L单位距离。最开始时,卡车上有P单位的汽油。卡车每开1单位消耗1单位的汽油。如果在途中卡车上的汽油耗尽,卡车就无法继续前行,因而无法到达终点。在途中一共有N个加油站。第i个加油站在距离起点Ai的距离,最多可以给卡车加Bi的汽油。卡车油箱无限大。请问卡车是否可以到达终点,如果可以请输入最少在几个加油站加油,如果不可以则输出-1
限制条件
- 1 <= N <= 10000
- 1 <= L <= 1000000
- 1 <= P <= 1000000
- 1 <= Ai < L
- 1 <= Bi <= 100
输入格式
第一行输入N L P
接下来N行输入Ai
接下来N行输入Bi
输出格式
输出结果
测试输入
4 25 10
10 14 20 21
10 5 2 4
测试输出
2
解题思路
使用最大堆,利用贪心法即可。
每次路过加油站,则将加油站可以加的油都记起来,最后没油的时候再使用最大的油,记为加了一次油。
代码
#include <iostream>#include <queue>using namespace std; #define MAX_N 100001int main() { int L, P, N; int A[MAX_N] = {0}; int B[MAX_N] = {0}; cin >> N >> L >> P; for (int i = 0; i < N; i++) { cin >> A[i]; } for (int j = 0; j < N; j++) { cin >> B[j]; } A[N] = L; B[N] = 0; N++; priority_queue<int> que; int ans = 0; int pos = 0; int tank = P; for (int i = 0; i < N; i++) { int d = A[i] - pos; while (tank - d < 0) { if (que.empty()) { cout << "-1"; return 0; } tank += que.top(); que.pop(); ans++; } tank -= d; pos = A[i]; que.push(B[i]); } cout << ans << endl; return 0; }
0 0
- 练习题 No.15 Expedition
- Expedition
- Expedition
- Expedition
- Expedition
- Expedition
- Expedition
- Expedition
- 练习题 No.20 食物链
- 练习题 No.11 化分数
- 练习题 No.13 最小堆
- 练习题 No.17 set容器
- 练习题 No.18 map容器
- 练习题 No.21 邻接表
- 练习题 No.8 完全背包问题
- 练习题 No.9 01背包问题
- 练习题 No.10 多重部分和问题
- 练习题 No.12 多重集组合数
- ajax往服务端发送checkbox的数组方式,服务端采用springMVC架构
- 外连接+聚合
- UEStudio快捷键
- 外链接
- C++ 对象的内存布局(下)
- 练习题 No.15 Expedition
- jQuery特性操作
- 北京黑马JavaEE就业班32期
- Swift安装和配置
- 微服务,微架构[三]之springboot集成nosql数据库mongodb
- oracle 递归查询
- 1005. Spell It Right (20)
- Mongodb学习(1)安装以及配置
- cocos js 代码阅读笔记_170510(一)