Poj—2431 Expedition 优先队列使用经典例题

[南大ICS-PA2] 字符串处理函数和printf实现 [南大ICS-PA2] 程序、运行时环境与AM 字符串处理函数和printf实现 阅读详情
就像《挑战程序设计竞赛》所说的——在到达加油站之前时,就获得一次在之后加油的权利。简单的说就是,当你经过第 i 个加油站时,先别加油,先压入优先队列,当你到达第 k 个加油站时,计算你车里的油够不够,若不够则从优先队列中选取一个在前面几站中最大的加油站,若还不够,加第二大的加油站.....
总的来说,先考虑能不能到下一站,能,则不加油;不能,就加前面几站中最大的。
这道题目:
1.给你加油站的距离是到终点的距离,而非是到卡车的距离。
2.给你的加油站的距离是随机的,而非排过序的,即在我看来必须有对加油站排序一次(当然可能是我太弱鸡的,还有其他方法^-^,有的话请告诉我,希望您不吝赐教)
3.优先队列的使用,默认是从大到小输出
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = 10000 + 10;
int the_num;
struct Node {
    int pos, fule;
};
Node stop[maxn];
int the_dis, have_fuel;
void solve() {
    priority_queue<int> que;
    int count = 0, current_position = 0;
    for (int i = 0; i <= the_num; i++) {
        int need_dis =stop[i].pos - current_position;
        while (need_dis > have_fuel) {
            if (que.empty()) {
                puts("-1");return;
            }
            have_fuel += que.top();
            que.pop();
            count++;
        }
        have_fuel -= need_dis;
        current_position =stop[i].pos;
        que.push(stop[i].fule);
    }
    printf("%d\n", count);
}
bool cmp(const Node& a, const Node& b) {
    return a.pos < b.pos;
}
int main() {
    while (scanf("%d", &the_num) == 1) {
        for (int i = the_num - 1; i >= 0; i--) {
            scanf("%d%d", &stop[i].pos, &stop[i].fule);
        }
        scanf("%d%d", &the_dis, &have_fuel);
        //题意是距离终点的距离而非是离开车的距离,具体可看Poj—2431的Hint
        for (int i = 0; i < the_num; i++) {
            stop[i].pos=the_dis-stop[i].pos;
        }
        //把终点当做一个加油站
        stop[the_num].pos = the_dis;
        stop[the_num].fule= 0;
        //对所有的站点排序
        sort(stop, stop + the_num + 1, cmp);
        solve();
    }
    return 0;
}

如果先要快速掌握优先队列的STL的使用方法转:http://blog.youkuaiyun.com/notcoldheike/article/details/76915753
谢谢观看(^-^)!!!

ubuntu-25.04-desktop-amd64 工具VMware-tools 正确安装方法 摘要:Ubuntu 25.04虚拟机安装VMware Tools后无法实现主机与虚拟机间的文件复制粘贴和拖拽功能,问题可能源于工具兼容性。建议优先安装open-vm-tools套件(含open-vm-tools-desktop),而非官方VMware Tools。具体方案:通过终端执行安装命令后重启系统。该方法已实测有效解决该兼容性问题。(149字) 阅读详情

相关推荐

深入理解DQN中的Q值:核心概念和应用

在强化学习中,Q值(或称为动作价值函数)是核心概念之一。Q值函数 ( Q(s, a) ) 表示在给定状态 ( s ) 下,采取动作 ( a ) 并遵循某策略后,智能体从当前状态到未来状态所能获得的预期总回报。简言之,Q值是评估特定状态和动作对的好坏的指标。

qlkaicx的博客 2975

有关优先级队列的4道题 priority_queue

堆/优先级队列数组第k大的元素最小k个数前k个高频单词数据流的中位数 数组第k大的元素 题目链接 两种堆的使用方法: 使用元素总个数大小的小根堆,弹出k个元素后堆顶元素就是所有元素中第k大的元素。 维护一个k大小的大根堆,这样堆中就是所有元素前k个最大元素,堆中元素依次弹出直到最后一个即为第k大的元素。 下面的为方法一的代码实现 class Solution { public: int findKthLargest(vector<int>& nums, int k) {

lzh824359508的博客 1486

DeepSeek助力学术审稿:高效处理审稿意见的实用提示词指南

本文介绍如何利用DeepSeek AI工具高效处理学术审稿意见,提供实用的提示词指南。从评审意见结构化整理到争议问题回应策略,详细解析AI在加速审稿流程中的应用技巧,帮助研究者大幅提升回复效率和质量。

weixin_28684497的博客 592

3道经典的优先队列题

优先队列是一种十分强大的数据结构,它保持了一种动态的有序性,对于不断改变有入队的操作,而又需要某种最大或最小的操作的问题是再合适不过了,通常优先队列的实现是由最小堆或者最大堆完成的,并通过堆排序保持队列的有序性,模拟队列的结构,在实际比赛中要写一个堆排序还是要一定的时间的,但是stl中queue容器中已经可以实现优先队列,下面以三道基本的题目来演示priority_queue的作用。 聪明的

South__wind的专栏 3686

PET,CT图像融合笔记

PET-CT怎样进行图像融合?图像融合实现CT与PET图像的融合 OpenCV实现(附实验结果)

chenran187906的博客 8409

RK3566添加ffpeg【Buildroot系统】

有很多人都发现了RK3566系列的芯片是不可以直接使用ffmpeg官网源码的!会报错: Not a video capture device. /dev/video0: No such device 接下来我们就来解决这个问题!!

honmy18的博客 4069

【leetcode】优先队列题目集合

一、在N个元素中选出前M个元素(N远大于M时) 在1,000,000个元素中选出前100名。 思路一:对N的元素进行排序,然后选出前M个元素,时间复杂度为O(NlogN)(采用快排或归并排序等高级排序算法) 思路二:使用优先队列,可以将时间复杂度降低为O(NlogM)。具体实现:使用优先队列维护M个元素,即每次向优先队列中加入一个元素时,需要将当前队列中的最小元素替换出去,保证队列中的M个元素...

littlemichelle 3622

游戏大厂射击游戏无缝大世界游戏DS服务器架构设计方案详解

摘要: 本文深入解析游戏大厂无缝大世界射击游戏的分布式服务器(DS)架构设计方案。以《和平精英》《量子特攻》为例,阐述如何通过动态分区、兴趣管理、弹性扩缩等核心技术应对高并发、低延迟、无缝切换等挑战。架构分为世界协调层、分区计算层、物理判定层等模块,结合微服务化、快照同步和Kubernetes调度,实现玩家跨区无感知迁移与一致判定。重点优化动态负载均衡、状态同步算法及容灾备份,依托分布式数据库与多云部署保障高可用性,为同类游戏提供可扩展的技术范本。(149字) 关键词: 无缝大世界、分布式服务器、动态分区、

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 562

LeetCode练习九:树(下)——优先队列、堆排序

为了代码的简洁,我们建堆时,将下标为0的位置空出来不用,根节点从1开始。给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素,你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。将数组转化为大顶堆,重复从大顶堆中取出数值最大的节点,并让剩余的堆结构继续维持大顶堆性质。:把移走了最大值元素以后的剩余元素组成的序列再构造为一个新的堆积(前面讲的新key下沉)。我们可以使用优先队列(大顶堆)来存储长度为k的窗口内的数组,这样堆顶元素一定是滑动窗口内的最大值。我们只能看到滑动窗口内的。

qq_56591814的博客 1038

电阻基础知识及应用电路仿真(Multisim)

本文围绕硬件工程师必备的电阻知识,从基础知识、实操、应用仿真三方面做系统讲解:基础上明确电阻的核心参数、分类、串并联计算及核心特性;实操中详解贴片/色环电阻的阻值读取、贴片封装换算,重点区分0Ω电阻(贴装跳线,实现功能选通/调试等)与磁珠(高频吸噪)的差异及选型;应用上介绍限流、分压、上拉/下拉、阻抗匹配、过压/过流保护五大典型电路的设计公式、选型原则和实操要点,同时给出电阻通用的选型、测量和布线设计规范,形成完整的电阻应用知识体系。

XU157303764的博客 2772

【车联网】Automotive 软件过程能力成熟度模型——ASPICE标准入门介绍

ASPICE标准详细定义了与汽车电子软件开发相关的各种术语和概念,包括软件组件、系统集成、测试和验证等。这些定义确保了所有开发团队在使用相同术语时具有一致的理解。

奶爸的编程之路,也就一周冷个三天 2676

优先队列(含详细解释和例题)

优先队列是一种特殊的队列,队列中元素都有一定的优先级,元素的出队顺序是根据它们的优先级来确定的。头文件为#include中,优先队列包含队列的所有操作,只是在队列的基础上加上一个排序,优先级高的先出队。定义优先队列:priority_queue1.Type:存储在优先队列中的元素类型。2.Container:用于底层存储的容器类型。STL中默认使用的是vector,但你也可以使用任何提供随机访问迭代器和支持front()以及。

2301_79899522的博客 1226

图机器学习(7)——图神经网络 (Graph Neural Network, GNN)

图神经网络 (Graph Neural Network, GNN) 是一类专门处理图结构数据的深度学习方法。这类方法也被称为几何深度学习 (geometric deep learning),在社交网络分析、计算机图形学等众多领域正受到日益广泛的关注。在本节中,我们介绍了 GNN 的核心原理,将卷积等经典深度学习范式拓展至非欧几里得图空间,实现了局部结构与全局特征的层次化提取。

盼小辉丶的博客 1万+

POJ 2431-Expedition

POJ 2431-Expedition 题意: 开车前往一个距离为l的城市,途中有n个加油站,每行驶一个单位的距离就会消耗一个单位的汽油,每到一个加油站都可以加油,问是否能到达目的地,能到达的话,最少需要加多少次油。 思路: 衷心提醒大家仔细看题!!!!!! 输入的距离不是距起点的距离,而是距终点的距离(白WA3发血亏),而且不一定按顺序给出,需要进行排序,所以用结构体还是比较方便的。 我们可以这样想,既然路过的每个加油站都可以加油,意思就是“经过一个加油站就获得了在之后任何一个时间加油的权力”。 为了最小

zzqwtc的博客 1799

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

优先队列的学习记录--例题:Expedition(POJ2431)

优先队列的学习记录--例题:Expedition--POJ2431 首先,什么是优先队列呢? 能够完成下列操作的数据结构叫做优先队列 □ 插入一个数值 □ 取出最小的数值(获得数值,并且删除) 当然,堆也能够实现以上操作,但STL里的priority_queue已经帮我们实现堆了,我们可以直接拿来使用。以下是一些操作的简单实用 priority_queuepque //优先队列的声明 pque.push(x) //优先队列的插入 插入一个整型的变量x pque.top() //读取

qq_45735298的博客 276

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

优先队列:POJ2431:Expedition

POJ2431:Expedition C++优先队列基本操作示例: #include<iostream> #include<queue> using namespace std; int main() { //声明 priority_queue<int> my; //插入元素 my.push(1); my.push(2)...

qq_45863710的博客 205

【POJ 2431 --- Expedition】

【POJ 2431 --- Expedition】 Description A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to run over a rock a...

来日浅谈的博客 680

POJ2431Expedition 优先队列

解题思路 在到达加油站 i 时,就获得了一次在之后的任何时候都可以加Bi 单位汽油的权利。每次从优先队列中取出最大的汽油。 · 在经过加油站 i 时,向优先队列中加入Bi · 当燃料箱空时,如果优先队列也是空的,则无法到达终点。否则取出优先队列中最大的元素,给卡车加油 import java.util.Comparator; import java.util.PriorityQueue; impo...

weixin_43588422的博客 232

POJ 2431 Expedition

POJ 2431 Expedition 坑:未必是按顺序给出输入,要自己先排序!(样例给的是排好序的,但实际上测试数据是乱序的,如果不排序无法确定遇见加油站的先后顺序) 排序时需要借助struct,因为如果只对dis[i]进行排序,无法保持dis与num之间的对应关系。 [关于struct排序中队sort的使用(https://blog.youkuaiyun.com/qq_40828914/article/d...

CarpeDiem 236

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

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

scf0920 1078

[POJ2431]Expedition[贪心][优先队列]

题目链接:[POJ2431]Expedition[贪心][优先队列] 题意分析:汽车油箱无上限,由于被牛儿们捅破了个口子,每移动1单位距离损失1单位油。初始有p单位油,中间有n个加油站,每个加油站可加油shop[i].amount,距离终点L的距离为shop[i].dis。汽车从初始位置开始出发,问:汽车能否到达终点?如果能,输出最少加油次数。否则,输出-1。 解题思路:既然要加油次数最少,那

闲停 628

POJ 2431——Expedition(优先队列)

链接:http://poj.org/problem?id=2431 题解 #include<iostream> #include<algorithm> #include<queue> using namespace std; const int MAX_N=1e4+50; int N,L,P; //N是加油站数,L是路程,...

SmallProgramer3121的博客 213

poj2431 -- Expedition

题目地址: http://poj.org/problem?id=2431 题目大意: 给n个城镇,分别是坐标和能加的油的数量,最后给车的位置l,和当前油的数量,每走一个单位,油会漏1点,问最后到达0至少需要加多少油,如果不能到达输出-1。 解题思路: 使用优先队列,利用反向思维,只要能到达的地方,就把当前城镇的油push到优先队列里面,然后只要队列不空,就不断的加队头的油,直到油的量大于等于距离l...

qq_43227036的博客 166

挑战程序设计竞赛 (优先队列) POJ 2431 & 3253

POJ 2431 Expedition 点击这里 查看题目 真的自闭,一个晚上写一道题。就是不知道哪里WA了,最后发现题目没有说一定是顺序输入的加油站(stop),所以在具体实现的时候需要先sort一下。/微笑 出错点 The first integer is the distance from the town to the stop; 2至N+1行给出的第一个数值是距终点(town)的...

ysugarr 269

优先队列简单介绍+例题POJ2431

优先队列一、优先队列简单介绍 优先队列是一种数据结构,能够实现插入一个数值,并且取出最小值(最大值)并删除等操作。 能够使用某种二叉树来实现优先队列,这种二叉树叫“堆”。堆分为小根堆和大根堆,小根堆的意思就是所有的子节点值一定不比父亲的值小,大根堆就是所有的子节点值一定不比父亲的节点值大。并且向堆中插入和取最小的值(或最大)的值得复杂度都为O(logn)。 二、STL中的优先队列都要加头文件 #in

WaveBridge的博客 1052

Expedition POJ - 2431 (优先队列)

题目链接Expedition - POJ 2431 - Virtual Judge 根据题意可知经过一个加油站可以选择加或者不加,但考虑到能否到达城镇,就得需要选择加最多的汽油,这就用到了优先队列的特性,即每次到达加油站的话就把能加的油量放进去,要是到不了就假设自己加了最多的那次油,如果所有油加上都到不了,只好输出-1了,尤其注意要看清加油站的坐标是以城镇为原点的,所以坐标数越大,说明加油站离我们就越近,这样我们可以先排一下序,让坐标大的在前面,小的在后面 AC代码: #include .

eyuhaobanga的博客 301

POJ 2431 加油站贪心 优先队列

POJ2431 Expedition Time Limit:1000MS Memory Limit:65536K Total Submissions:28035 Accepted:7757 Description A group of cows grabbed a truck and ventured on an expedition deep...

CC_且听风吟丶的博客 383
上一篇: Poj-1328 二维化一维 典型贪婪算法
下一篇: 快速掌握优先队列-代码
NotColdHeike
博客等级 码龄9年 2粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值