链接: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
  • 当燃料箱为空时
  1. 若优先队列为空,则无法到达终点
  2. 否则取出最大元素用来给卡车加油

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 ...

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

    题目链接:http://poj.org/problem?id=2431 题意:一辆卡车要行驶L单位距离,卡车上有P单位的汽油.一共有N个加油站,分别给出加油站距终点距离,及加油站可以加的油量.问卡车能 ...

随机推荐

  1. javascript JS CryptoJS DES加解密CBC模式与C#DES加解密相同互通

    我们只知道不同的语言解密要相互通用,就需要遵循相同的加密方式,然而在具体做技术预研的时候,就发现会遇到很多问题,网上找的资料也是比较片面,所以我踩了坑,并且把解决方案和相关资料源码提供出来,给需要的朋 ...

  2. [Environment setup]python+selenium+Eclipse+pydev环境搭建

    转载自: http://www.cnblogs.com/Bonker/p/3584707.html http://www.cnblogs.com/fnng/archive/2013/05/29/310 ...

  3. Aizu-2224Save your cats并查集+最小生成树

    Save your cats 题意:存在n个点,有m条边( input中读入的是 边的端点,要先转化为边的长度 ),做一个最小生成树,使得要去除的边的长度总和最小: 思路:利用并查集和求最小生成树的方 ...

  4. 中南林业科技大学第十一届程序设计大赛 有趣的二进制 牛客网 java大数的一些方法

    链接:https://www.nowcoder.com/acm/contest/124/C来源:牛客网 题目描述 小新在学C语言的时候,邝老师告诉他double类型的数据在表示小数的时候,小数点后的有 ...

  5. 使用Spring Boot和RxJava的构建响应式REST API

    我不打算解释什么是响应式编程,也不解释为什么要使用它.我希望你已经在其他地方了解过,如果没有,你可以使用Google去搜索它.在本文中,我将告诉您如何使用专门针对Spring Boot和RxJava的 ...

  6. CentOS 磁盘扩容

    本人对Linux本来就不是很熟,但是由于各种原因开始捣鼓CentOS(大家都说是这个系统比较好学),开始预计20G的磁盘就足够了,没想到装Oracle就直接报磁盘空间不足,更别提在Tomcat下部署近 ...

  7. 5分钟了解lucene全文索引

    一.Lucene介绍及应用 Apache Lucene是当下最为流行的开源全文检索工具包,基于JAVA语言编写. 目前基于此工具包开源的搜索引擎,成熟且广为人知的有Solr和Elasticsearch ...

  8. 基础知识:什么是SNMP

    简单网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器.工作站.路由器.交换机及HUBS等)的一种标准协议,它是一种应用层协议. SNMP 使网络管理员能够管理网络效能,发现并 ...

  9. Python大佬告诉你:使用Python处理yaml格式的数据简单到爆

    一.思考❓❔ 1.什么是yaml? 不是标记语言 对用户极其友好 数据序列化标准 跨语言 所有编程语言都支持 跨平台 所有平台都支持 Windows.linux.Mac 格式简单 比json小姐姐穿得 ...

  10. Java线程的几种状态(基于Oracle jdk 1.8)

    Java中线程的状态定义在java.lang.Thread类中的一个枚举中. public enum State { /** * Thread state for a thread which has ...