poj 2431 poj 3253 优先队列的运用

2024-09-09 16:18
文章标签 队列 poj 优先 运用 3253 2431

本文主要是介绍poj 2431 poj 3253 优先队列的运用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

poj 2431:

题意:

一条路起点为0, 终点为l。

卡车初始时在0点,并且有p升油,假设油箱无限大。

给n个加油站,每个加油站距离终点 l 距离为 x[i],可以加的油量为fuel[i]。

问最少加几次油可以到达终点,若不能到达,输出-1。


解析:

《挑战程序设计竞赛》:

“在卡车开往终点的途中,只有在加油站才可以加油。但是,如果认为“在到达加油站i时,就获得了一次可以在之后任何位置加一次fuel[i]升油的机会”。

在解决问题上也可以这样做,之后需要加油时,认为在之前经过该加油站加的油就行了。

那么,因为希望到达终点时的加油次数尽量少,所以当燃料为0了之后再进行加油看上去是一个不错的方法。在燃料为0时,应该使用哪个加油站来加油呢?

显然,应该选择加油量fuel[i]最大的加油站。这里就用到了优先队列。”


所以,按题中,装换排序,用优先队列就行了。


代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <map>
#include <climits>
#include <cassert>
#define LL long long
#define lson lo, mi, rt << 1
#define rson mi + 1, hi, rt << 1 | 1using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 10000 + 10;
const double eps = 1e-9;int n, l, p;struct Node
{int x, fuel;bool operator<(Node a)const{return fuel < a.fuel;}
} node[maxn];bool cmp(Node a, Node b)
{return a.x < b.x;
}int main()
{
#ifdef LOCALfreopen("in.txt", "r", stdin);
#endif // LOCALwhile (~scanf("%d", &n)){for (int i = 0; i < n; i++){scanf("%d%d", &node[i].x, &node[i].fuel);}scanf("%d%d", &l, &p);for (int i = 0; i < n; i++)node[i].x = l - node[i].x;sort(node, node + n, cmp);node[n].x = l;node[n++].fuel = 0;
//        for (int i = 0; i < n; i++)
//        {
//            cout << node[i].x << " " << node[i].fuel << endl;
//        }priority_queue<Node> q;
//        q.push(node[0]);
//        q.push(node[1]);
//        q.push(node[2]);
//        q.push(node[3]);
//        cout <<endl;
//        while (!q.empty())
//        {
//            cout << q.top().fuel << endl;
//            q.pop();
//        }bool flag = true;int pos = 0, ans = 0;for (int i = 0; i < n; i++){int d = node[i].x - pos;while (p < d){if (q.empty()){flag = false;break;}p += q.top().fuel;q.pop();ans++;}if (!flag)break;pos = node[i].x;p -= d;q.push(node[i]);}if (!flag)ans = -1;printf("%d\n", ans);}return 0;
}


poj 3253:

贪心+优先队列。

greater的运用。

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <map>
#include <climits>
#include <cassert>
#define LL long long
#define lson lo, mi, rt << 1
#define rson mi + 1, hi, rt << 1 | 1using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 20000 + 10;
const double eps = 1e-9;int n;
int l[maxn];void solve()
{LL ans = 0;priority_queue<int, vector<int>, greater<int> > q;for (int i = 0; i < n; i++)q.push(l[i]);
//    cout << n <<endl;
//    cout << q.size()    << endl;while (q.size() > 1){int l1, l2;l1 = q.top();q.pop();l2 = q.top();q.pop();
//        cout << l1 << l2 << endl;ans += (LL)l1 + (LL)l2;q.push(l1 + l2);}printf("%lld\n", ans);
}int main()
{
#ifdef LOCALfreopen("in.txt", "r", stdin);
#endif // LOCALwhile (~scanf("%d", &n)){for (int i = 0; i < n; i++)scanf("%d", &l[i]);solve();}return 0;
}


这篇关于poj 2431 poj 3253 优先队列的运用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1151653

相关文章

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

Swagger在java中的运用及常见问题解决

《Swagger在java中的运用及常见问题解决》Swagger插件是一款深受Java开发者喜爱的工具,它在前后端分离的开发模式下发挥着重要作用,:本文主要介绍Swagger在java中的运用及常... 目录前言1. Swagger 的主要功能1.1 交互式 API 文档1.2 客户端 SDK 生成1.3

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

golang实现延迟队列(delay queue)的两种实现

《golang实现延迟队列(delayqueue)的两种实现》本文主要介绍了golang实现延迟队列(delayqueue)的两种实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录1 延迟队列:邮件提醒、订单自动取消2 实现2.1 simplChina编程e简单版:go自带的time

CSS引入方式和选择符的讲解和运用小结

《CSS引入方式和选择符的讲解和运用小结》CSS即层叠样式表,是一种用于描述网页文档(如HTML或XML)外观和格式的样式表语言,它主要用于将网页内容的呈现(外观)和结构(内容)分离,从而实现... 目录一、前言二、css 是什么三、CSS 引入方式1、行内样式2、内部样式表3、链入外部样式表四、CSS 选

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

SpringKafka错误处理(重试机制与死信队列)

《SpringKafka错误处理(重试机制与死信队列)》SpringKafka提供了全面的错误处理机制,通过灵活的重试策略和死信队列处理,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、Spring Kafka错误处理基础二、配置重试机制三、死信队列实现四、特定异常的处理策略五

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque