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个加油站,分别给出加油站距终点距离,及加油站可以加的油量.问卡车能 ...
随机推荐
- TypeScript进阶开发——ThreeJs基础实例,从入坑到入门
前言 我们前面使用的是自己编写的ts,以及自己手动引入的jquery,由于第三方库采用的是直接引入js,没有d.ts声明文件,开发起来很累,所以一般情况下我们使用npm引入第三方的库,本文记录使用np ...
- Oracle大量数据更新策略
生产上要修改某个产品的产品代号, 而我们系统是以产品为中心的, 牵一发而动全身, 涉及表几乎覆盖全部, 有些表数据量是相当大的, 达到千万, 亿级别. 单纯的维护产品代号的 SQL 是不难的, 但是性 ...
- 【故障公告】阿里云 RDS 数据库服务器 CPU 100% 造成全站故障
非常非常抱歉,今晚 19:34 ~ 21:16 园子所使用的阿里云 RDS 数据库服务器突然出现 CPU 100% 问题,造成全站无法正常访问,由此您带来了很大的麻烦,请您谅解. 故障经过是这样的.1 ...
- mysql登录的root密码问题
先说下场景:官网上下载mysql-5.7.18-winx64包,解压,设置环境变量完毕,执行install等命令安装完毕,一切正常,并未发现有什么问题. 然后使用客户端连接数据库时,死活报错:ERRO ...
- 牛课练习赛34 Flittle w and Discretization 主席树维护Mex
ittle w and Discretization 主席树维护Mex. 每个右端点 r 维护出一棵 在[1, r ] 区间中 其他所有的 值离这个 r 最近的的位置是多少. 然后询问区间[L,R]的 ...
- 基于注解的读取excel的工具包
easyexcel-wraper easyexcel-wraper是什么? 一个方便读取excel内容,且可以使用注解进行内容验证的包装工具 easyexcel-wraper有哪些功能? 在easye ...
- Springboot源码分析之Spring循环依赖揭秘
摘要: 若你是一个有经验的程序员,那你在开发中必然碰到过这种现象:事务不生效.或许刚说到这,有的小伙伴就会大惊失色了.Spring不是解决了循环依赖问题吗,它是怎么又会发生循环依赖的呢?,接下来就让我 ...
- mariadb 离线安装
[root@localhost local]# cd /var/local[root@localhost local]# lsmariadb[root@localhost local]# cd /ma ...
- HTTPS页面使用CNZZ统计代码,Chrome显示警告怎么办?
很多站长会遇到一个问题,网站加入CNZZ的JS统计代码后,Chrome浏览器出现警告:阻止跨站解析器阻断脚本通过document.write调用(A parser-blocking, cross si ...
- (转)为什么HashMap中链表长度超过8会转换成红黑树
原博地址:https://blog.csdn.net/xingfei_work/article/details/79637878 HashMap在jdk1.8之后引入了红黑树的概念,表示若桶中链表元素 ...