POJ 2431——Expedition(贪心,优先队列)
链接:http://poj.org/problem?id=2431
题解
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
;
int N,L,P; //N是加油站数,L是路程,P是初始燃料量
struct node{
int a, b; //a是加油站到城镇(终点)的距离,b是每个加油站燃料量
}code[MAX_N];
bool comp(node x, node y){ //自定义排序函数:先按位置升序排,相等时再按油量降序
if (x.a==y.a)
return x.b>y.b;
return x.a<y.a;
}
int main(){
scanf("%d",&N);
;i>=;i--)
scanf("%d%d",&code[i].a,&code[i].b);
scanf("%d%d",&L,&P);
;i<N;i++)
code[i].a=L-code[i].a; //为适应挑战上的算法,需要改变 a的含义
//为了叙述方便,把终点也视为加油站
code[N].a=L;
code[N].b=;
N++;
//若加油站的位置随意输入,应按距离城镇远近排序
sort(code,code+N,comp);
//维护加油站的优先队列
priority_queue<int> s;
//ans:加油次数,pos:当前位置,tank:剩余燃料量
,pos=,tank=P;
;i<N;i++){
//接下来要前进的距离
int d=code[i].a-pos;
//不断加油直到能够行驶到下一个加油站
) {
if(s.empty()) {
printf("-1\n");
;
}
tank+=s.top();
s.pop();
ans++;
}
tank-=d;
pos=code[i].a;
s.push(code[i].b);
}
printf("%d\n",ans);
;
}
在卡车开往终点的途中,只有途径加油站才能加油
稍微变换一下思考方式:到达加油站 i 时,就获得了一次在之后任何时候都可以加 code[i].b 单位燃料的权利,以后加油时,就认为是在之前经过的加油站加油即可
由于希望到达终点时加油次数尽可能少,所以当燃料为0时再进行加油,且选择燃料量最大的加油站
为了高效操作,可使用从大到小依次取出数值的优先队列
- 经过加油站时,往优先队列里加如 code[i].b
- 当燃料箱为空时
- 若优先队列为空,则无法到达终点
- 否则取出最大元素用来给卡车加油
POJ 2431——Expedition(贪心,优先队列)的更多相关文章
- POJ 2431 Expedition (贪心+优先队列)
题目地址:POJ 2431 将路过的加油站的加油量放到一个优先队列里,每次当油量不够时,就一直加队列里油量最大的直到能够到达下一站为止. 代码例如以下: #include <iostream&g ...
- poj 2431 Expedition 贪心 优先队列 题解《挑战程序设计竞赛》
地址 http://poj.org/problem?id=2431 题解 朴素想法就是dfs 经过该点的时候决定是否加油 中间加了一点剪枝 如果加油次数已经比已知最少的加油次数要大或者等于了 那么就剪 ...
- poj 2431 Expedition 贪心+优先队列 很好很好的一道题!!!
Expedition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10025 Accepted: 2918 Descr ...
- POJ 2431 Expedition (优先队列+贪心)
题目链接 Description A group of cows grabbed a truck and ventured on an expedition deep into the jungle. ...
- POJ 2431 Expedition(优先队列、贪心)
题目链接: 传送门 Expedition Time Limit: 1000MS Memory Limit: 65536K 题目描述 驾驶一辆卡车行驶L单位距离.最开始有P单位的汽油.卡车每开1 ...
- poj - 2431 Expedition (优先队列)
http://poj.org/problem?id=2431 你需要驾驶一辆卡车做一次长途旅行,但是卡车每走一单位就会消耗掉一单位的油,如果没有油就走不了,为了修复卡车,卡车需要被开到距离最近的城镇, ...
- poj 2431 Expedition 贪心
简单的说说思路,如果一开始能够去到目的地那么当然不需要加油,否则肯定选择能够够着的油量最大的加油站加油,,不断重复这个贪心的策略即可. #include <iostream> #inclu ...
- POJ 2431 Expedition 贪心 优先级队列
Expedition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 30702 Accepted: 8457 Descr ...
- POJ 2431 Expedition(探险)
POJ 2431 Expedition(探险) Time Limit: 1000MS Memory Limit: 65536K [Description] [题目描述] A group of co ...
- POJ 2431 Expedition (贪心 + 优先队列)
题目链接:http://poj.org/problem?id=2431 题意:一辆卡车要行驶L单位距离,卡车上有P单位的汽油.一共有N个加油站,分别给出加油站距终点距离,及加油站可以加的油量.问卡车能 ...
随机推荐
- Python字符串中删除特定字符
分析 在Python中,字符串是不可变的.所以无法直接删除字符串之间的特定字符. 所以想对字符串中字符进行操作的时候,需要将字符串转变为列表,列表是可变的,这样就可以实现对字符串中特定字符的操作. 1 ...
- java 中for循环中断的办法
/* 中断for循环的办法: 1.break ***2.return是结束方法的,不是结束循环的. 3.标签的方法. 格式: 表签名:语句 运行结果:D:\test\day0413>java T ...
- 如何将 JavaScript 代码添加到网页中,以及 <script> 标签的属性
Hello, world! 本教程的这一部分内容是关于 JavaScript 语言本身的. 但是,我们需要一个工作环境来运行我们的脚本,由于本教程是在线的,所以浏览器是一个不错的选择.我们会尽可能少地 ...
- elementUI树状图竖向滚动条和横向滚动条问题
添加样式: <div class="device-tree"> <el-scrollbar style="height:100%"> & ...
- springboot应用监控和管理
spring boot应用监控和管理 Spring Boot 监控核心是 spring-boot-starter-actuator 依赖,增加依赖后, Spring Boot 会默认配置一些通用的监控 ...
- 在asp.net core中使用托管服务实现后台任务
在业务场景中经常需要后台服务不停的或定时处理一些任务,这些任务是不需要及时响应请求的. 在 asp.net中会使用windows服务来处理. 在 asp.net core中,可以使用托管服务来实现,托 ...
- Nginx安装及详解
Nginx简介: Nginx(发音engine x)专为性能优化而开发的开源软件,是HTTP.反向代理.邮件代理.TCP/UDP协议代理软件,由俄罗斯的作者Igor Sysoev开发,其最知名的优点是 ...
- Redis的复制(Master/Slave)、主从复制、读写分离 (下)
哨兵模式(就是反客为主的自动版) 能够自动监控主机是否故障,如果故障了根据投票数自动将从机变成主机 1创建哨兵文件 touch sentinel.conf [root@localhost myredi ...
- 排序入门练习题3 谁考了第k名 题解
题目出处:<信息学奥赛一本通>第二章 上机练习1 题目描述 在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名的学生的学号和成绩. 输入格式 输入的第一行包含两 ...
- Hive函数大全-完整版
现在虽然有很多SQL ON Hadoop的解决方案,像Spark SQL.Impala.Presto等等,但就目前来看,在基于Hadoop的大数据分析平台.数据仓库中,Hive仍然是不可替代的角色.尽 ...