题意:一辆卡车要行驶L单位距离,卡车上有P单位的汽油。一共有N个加油站,分别给出加油站距终点距离,及加油站可以加的油量。问卡车能否到达终点?若不能输出-1,否则求出最少加油次数。
解题思路:可以认为"在到达加油站时,获得一次可以在任何时候使用这个加油站加油的资格",而在之后需要加油时,就认为是在之前经过的加油站加的油就可以了。因为希望加油次数最少,所以在燃料不够行驶时选择加油量最大的加油站加油。为了高效性,我们可以使用从大到小的顺序依次取出数值的优先队列。
 #include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
struct node{
int dis;
int gas;
}a[]; bool cmp(node a,node b){
return a.dis<b.dis;
}
int main(){
int n;
while(cin>>n){
for(int i=;i<=n;i++){
cin>>a[i].dis>>a[i].gas;
}
int l,p;
cin>>l>>p;
//终点
a[n+].dis=l;
a[n+].gas=;
//将加油站到终点距离变为离起点距离并从小到大排好
for(int i=;i<=n;i++){
a[i].dis=l-a[i].dis;
}
sort(a+,a+n+,cmp);
//优先队列,从大到小
priority_queue<int>q;
//ans:加油次数,pos:当前位置,tank:剩余油量
int ans=,pos=,tank=p;
for(int i=;i<=n+;i++){
//当前位置离下一个加油站的距离
int x=a[i].dis-pos;
while(tank<x){
if(q.empty()){
cout<<"-1"<<endl;
return ;
}
tank+=q.top();
q.pop();
ans++;
}
tank-=x;
pos=a[i].dis;
q.push(a[i].gas);
}
cout<<ans<<endl;
}
return ;
}

POJ 2431 Expedition (贪心 + 优先队列)的更多相关文章

  1. POJ 2431 Expedition (贪心+优先队列)

    题目地址:POJ 2431 将路过的加油站的加油量放到一个优先队列里,每次当油量不够时,就一直加队列里油量最大的直到能够到达下一站为止. 代码例如以下: #include <iostream&g ...

  2. poj 2431 Expedition 贪心 优先队列 题解《挑战程序设计竞赛》

    地址 http://poj.org/problem?id=2431 题解 朴素想法就是dfs 经过该点的时候决定是否加油 中间加了一点剪枝 如果加油次数已经比已知最少的加油次数要大或者等于了 那么就剪 ...

  3. poj 2431 Expedition 贪心+优先队列 很好很好的一道题!!!

    Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10025   Accepted: 2918 Descr ...

  4. POJ 2431 Expedition (优先队列+贪心)

    题目链接 Description A group of cows grabbed a truck and ventured on an expedition deep into the jungle. ...

  5. POJ 2431 Expedition(优先队列、贪心)

    题目链接: 传送门 Expedition Time Limit: 1000MS     Memory Limit: 65536K 题目描述 驾驶一辆卡车行驶L单位距离.最开始有P单位的汽油.卡车每开1 ...

  6. poj - 2431 Expedition (优先队列)

    http://poj.org/problem?id=2431 你需要驾驶一辆卡车做一次长途旅行,但是卡车每走一单位就会消耗掉一单位的油,如果没有油就走不了,为了修复卡车,卡车需要被开到距离最近的城镇, ...

  7. poj 2431 Expedition 贪心

    简单的说说思路,如果一开始能够去到目的地那么当然不需要加油,否则肯定选择能够够着的油量最大的加油站加油,,不断重复这个贪心的策略即可. #include <iostream> #inclu ...

  8. POJ 2431 Expedition 贪心 优先级队列

    Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30702   Accepted: 8457 Descr ...

  9. POJ 2431 Expedition(探险)

    POJ 2431 Expedition(探险) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] A group of co ...

随机推荐

  1. 解题:ZJOI 2006 书架

    题面 学习了如何在维护序列的平衡树上查找某个数:按初始的顺序定个权值,然后每次找那个权值的DFS序即可.具体实现就是不停往上跳,然后是父亲的右儿子就加上父亲的左儿子,剩下的就是继续熟悉无旋树堆 #in ...

  2. Linux之执行命令操作20170330

    介绍一下Linux系统中的代码执行shell等命令的几种操作方式: 一.标准流管道popen 该函数的原型是FILE * popen(const char* command, const char * ...

  3. phpstorm 自定义属性没语法提示的问题

    在右侧Options勾选上Custom HTML tag attributes,并且在下面的输入框输入自定义属性列表,逗号分隔.

  4. valgrind检查C/C++内存泄漏

    valgrind --tool=memcheck --leak-check=full ./httptest  valgrind --tool=memcheck --leak-check=full -- ...

  5. UVA - 11181 数学

    UVA - 11181 题意: n个人去买东西,其中第i个人买东西的概率是p[i],最后只有r个人买了东西,求每个人实际买了东西的概率 代码: //在r个人买东西的概率下每个人买了东西的概率,这是条件 ...

  6. HTML5 Web Notifications 桌面推送小记

    目录 简介 常用API 手动设置权限 简介 Web Notifications目前在w3c的协议中已经是"推荐"(REC:Recommendation)阶段,除了iE外,各大现代浏 ...

  7. [Java多线程]-ThreadLocal源码及原理的深入分析

    ThreadLocal<T>类:以空间换时间提供一种多线程更快捷访问变量的方式.这种方式不存在竞争,所以也不存在并发的安全性问题. //-------------------------- ...

  8. HTML入门(二)表格_字体_超链接_布局

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 桥接模式_NAT模式_仅主机模式_模型图.ziw

      2017年1月12日, 星期四 桥接模式_NAT模式_仅主机模式_模型图   null

  10. GridControl详解(八)菜单

    菜单控件 拖入窗口中 显示如下 设置popupMenu 设置barManager 设置controller 增加菜单项 弹出配置窗口 一般菜单项设置 对应属性如下: 对应事件: 选择菜单项设置 事件同 ...