poj(2431)(优先队列http://poj.org/problem?id=2431)
来源:互联网 发布:逆波兰式 java 编辑:程序博客网 时间:2024/05/16 03:07
题目:http://poj.org/problem?id=2431
题意:有n个加油站在一条直线上,每个加油站最多可以加多少油,以及加油站的位置到终点的距离,假设汽车邮箱容量无限,以及初始的油量,求能不能到终点及最少的加油次数。
分析:优先队列模拟题意,油足够的话向前走,油不够的时候从走过的路里面选择可以加油最多的地方加油!
代码:
#include <cstdio>#include <iostream>#include <queue>#include <algorithm>using namespace std;const int N = 12000;struct Node{ int lis,pro;};Node a[N];int comp(Node a,Node b){ if(a.lis!=b.lis) return a.lis<b.lis;}int main(){ priority_queue<int> v; int n; while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) scanf("%d%d",&a[i].lis,&a[i].pro); int num,st; scanf("%d%d",&num,&st); for(int i=1;i<=n;i++) { a[i].lis=num-a[i].lis; } sort(a+1,a+n+1,comp); int ok=1,ans=0; a[0].lis=0; a[n+1].lis=num,a[n+1].pro=0; for(int i=1;i<=n+1;i++) { if((a[i].lis-a[i-1].lis)<=st) { st-=(a[i].lis-a[i-1].lis); v.push(a[i].pro); } else { ans++; if(v.empty()) { ok=0;break; } st+=v.top(); v.pop(); i--; } } if(ok==0) ans=-1; printf("%d\n",ans); } return 0;}/*14 59 5*/
0 0
- poj(2431)(优先队列http://poj.org/problem?id=2431)
- http://poj.org/problem?id=2481 树状数组+优先队列
- POJ 1251(http://poj.org/problem?id=1251)
- http://poj.org/problem?id=2965
- http://poj.org/problem?id=2075
- http://poj.org/problem?id=1125
- http://poj.org/problem?id=2983
- http://poj.org/problem?id=2406
- http://poj.org/problem?id=1961
- http://poj.org/problem?id=1486
- http://poj.org/problem?id=1062
- http://poj.org/problem?id=2983
- http://poj.org/problem?id=3159
- http://poj.org/problem?id=1201
- http://poj.org/problem?id=3259
- http://poj.org/problem?id=3233
- http://poj.org/problem?id=1273
- http://poj.org/problem?id=3281
- oracle查看隐含参数脚本
- ASMM下查看shared_pool_size等内存大小
- ORA-01264: Unable to create logfile file name
- Solr查询语法总结
- PRCS-1007 : Server pool egapdb already exists
- poj(2431)(优先队列http://poj.org/problem?id=2431)
- oracle 阻塞
- 数据库迁移方案之DG方式迁移
- lsnrctl status 缺少Listener Parameter File信息
- 分区表索引总结
- 你真的了解JAVA中与Webservice相关的规范和实现吗?
- DG实施方案(主库为双节点rac)--rman duplicate方式
- 将博客搬至CSDN
- week-13