POJ2431 优先队列+贪心
来源:互联网 发布:青岛乐智网络 编辑:程序博客网 时间:2024/06/07 11:24
题目大意:
见《挑战程序设计竞赛》P74。
我的理解:
优先队列+贪心
注意把输入的距离(加油站到终点)改为起点到加油站。
因为求得是最优解,需要尽可能少的加油站,所以我们每次希望去加油的时候 加最大的那个,因而将加油站push进priority_queue(堆结构,默认每次弹出最大值)
在到达加油站 i 时,就获得了一次在之后的任何时候都可以在加 stop[i].second 单位汽油的权利。
我的代码:
#include <iostream>#include <cstdio>#include <queue>#include <algorithm>#define MAX_N 10010using namespace std;typedef pair<int,int> P;int L,p,N;P stop[MAX_N];int cmp(P p1,P p2){return p1.first < p2.first;}void solve(){stop[N].first = L;stop[N].second = 0;N++;priority_queue<int> que;int ans = 0,pos = 0,tank = p;for(int i = 0;i<N;i++){int d = stop[i].first - pos;while(tank-d < 0){if(que.empty()){puts("-1");return;}tank += que.top();que.pop();ans++;}tank -= d;pos = stop[i].first;que.push(stop[i].second);}cout<<ans<<endl;}int main(){freopen("D:/OJ/挑战程序设计竞赛/POJ2431.txt","r",stdin);while(scanf("%d",&N) != EOF){for(int i = N-1;i>=0;i--){cin>>stop[i].first>>stop[i].second;}cin>>L>>p;for(int i = 0;i<N;i++){stop[i].first = L-stop[i].first;//cout<<A[i]<<" "<<B[i]<<" ";}sort(stop,stop+N,cmp);solve();}return 0;}
阅读全文
0 0
- POJ2431 优先队列+贪心
- [POJ2431]Expedition[贪心][优先队列]
- POJ2431-Expedition(优先队列 + 贪心)
- POJ2431 Expedition【贪心+优先队列】
- poj2431 Expedition(优先队列和贪心)
- POJ2431 Expedition (贪心,优先队列)
- POJ2431 二叉堆(优先队列)以及贪心算法
- poj2431 Expedition 优先队列
- 优先队列--poj2431
- POJ2431 Expedition (优先队列)
- POJ2431 数据结构 (优先队列)
- poj2431(优先队列)
- poj2431 优先队列
- poj2431优先队列
- POJ2431(优先队列)
- POJ2431优先队列
- poj2431 优先队列
- poj2431 Expedition_STL优先队列
- JS有关日期的基本操作
- 简化代码
- 【JAVA微信开发】WxMessageSDK-轻量的微信公众号消息处理SDK
- 深入理解Java虚拟机 第七章 虚拟机类加载器
- Maven聚合模块与继承和Maven的生命周期
- POJ2431 优先队列+贪心
- Maven命令与pom文件常量
- Python调用Webserverice接口
- 假脱机服务(SPOOLing service)
- Android Studio中架包打包和依赖冲突解决
- SD NAND可以取代T卡的芯片
- I2C通讯协议介绍
- Collectors
- Javascript(BOM)浏览器对象 2017-08-01