题目链接:https://vjudge.net/problem/POJ-2431

思路:

  “ 在卡车行驶途中, 只有经过加油站才能加油。” 我们不妨转变思路, 理解成“当卡车驶过加油站时就获得了加油的权利”,在之后需要加油时, 就认为是在之前经过加油站时加的油即可。

  那么我们何时加油呢, 最好的办法当然是选择能加最多油的加油站了(选择一次加大量的油, 可以减少加油次数),这时就要用到优先队列了。

  下面是代码:

 #include <cstdio>
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std; struct gas
{
int dis;
int fule;
}a[]; bool cmp(gas A, gas B)
{
return A.dis<B.dis;
} priority_queue<int> que; int main()
{
int n,L,P;
cin>>n;
for(int i=; i<n; i++)
{
cin>>a[i].dis>>a[i].fule;
}
cin>>L>>P;
for(int i=; i<n; i++)
{
a[i].dis = L-a[i].dis;
}
sort(a, a+n, cmp);
a[n].dis=L;
a[n].fule=;
n++;//关键
int position=, count=, tank=P;//所在位置, 加油次数, 剩余油量
for(int i=; i<n; i++)
{
int d=a[i].dis - position;
while(tank-d<)
{
if(que.empty())
{
puts("-1");
return ;
}
tank += que.top();//加油
que.pop();
count++;
}
tank -= d;
position = a[i].dis;
que.push(a[i].fule);//关键
}
cout<<count<<endl; return ;
}

注释中的两个关键点要注意, 自己慢慢体会吧。

觉得有帮助不妨点个推荐呀!

 题外话:

  最近比赛被吊打, 所以准备重新系统性学习。 看到这题是七个月前AC的, 不禁百感交集, 感觉这半年来并没有怎么提升啊。 果然还是不够“刻意练习”!!!

POJ 2431 (优先队列)的更多相关文章

  1. POJ 2431 优先队列

    汽车每过一单位消耗一单位油,其中有给定加油站可加油,问到达终点加油的最小次数. 做法很多的题,其中优先对列解这题是很经典的想法,枚举每个加油站,判断下当前油量是否小于0,小于0就在前面挑最大几个直至油 ...

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

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

  3. poj 2431 【优先队列】

    poj 2431 Description A group of cows grabbed a truck and ventured on an expedition deep into the jun ...

  4. POJ 2431 Expedition(探险)

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

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

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

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

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

  7. POJ 2431——Expedition(贪心,优先队列)

    链接:http://poj.org/problem?id=2431 题解 #include<iostream> #include<algorithm> #include< ...

  8. 优先队列(挑程)poj 2431

    每次写poj的题都很崩溃,貌似从来没有一次一发就ac的,每次都有特别多的细节需要考虑.还有就是自己写的太粗糙了,应该把每种情况都想到的,总是急着交,然后刷一页wa. 优先队列直接用stl就可以,简单实 ...

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

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

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

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

随机推荐

  1. ActiveX多线程回调JavaScript

    http://www.cnblogs.com/zdxster/archive/2011/01/27/1945872.html

  2. UML学生成绩管理系统需求分析

    学生成绩管理系统工作室高校教育工作的一项重要内容.教务管理工作是指学校管理人员按照一定的教育方针,运用先进的管理手段,组织.协调.指挥并指导各用户活动,一边高效率.高质量地完成各项教学任务,完成国家所 ...

  3. 数据库事务总结(一)-ACID

    概述 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将 ...

  4. es6安装babel包

    1.前面下载node.js及安装淘宝镜像可以查看我写的vue.js环境搭建 2.安装完node后,安装babel npm install -g babel-cli 3.检验babel是否安装成功: b ...

  5. Redis系列一:reids的单机版安装

    环境:VM+centos6+xshell 1.准备好linux的虚拟机,这里用的是centos6,具体方法百度 2.进入software目录,创建一个redis的目录来存放下载的redis包 cd s ...

  6. BZOJ4269:再见Xor(线性基)

    Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. Input 第一行一个正整数N. 接下来一行N个非负整数. ...

  7. PHP缓存锁原理及利用

    原文链接:https://blog.csdn.net/tim_phper/article/details/54949404 概述: 项目当中经常要考虑数据高并发的情况,为了避免并发导致出现一些资源重复 ...

  8. QT学习笔记8:QDir类及其用法总结

    简介 QDir类提供了访问系统目录结构及其内容的与平台无关的方式. 头文件:#include <qdir.h> QDir类用来操作路径名及底层文件系统,获取关于目录路径及文件的相关信息,也 ...

  9. VC++定义全局变量及extern用法

    基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern有两 ...

  10. Python2.7-NumPy

    NumPy 提供了两种基本对象ndarray(N-dimensional array object)和 ufunc(universal function object)ndarray(下文统一称之为数 ...