博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2431 Expedition
阅读量:6694 次
发布时间:2019-06-25

本文共 1276 字,大约阅读时间需要 4 分钟。

贪心,优先级队列。

基本思路:走过一个加油站,先不要加油,把这个油量存到仓库,到油量不够的时候去仓库补油,补油优先选择油量大的。

细节较多,容易写错。

#include
#include
#include
#include
#include
using namespace std;int n;struct Point{ long long x; long long sum;}p[100000 + 10];long long L, P;bool cmp(const Point&a, const Point&b){ return a.x
q; for (int i = 1; i <= n; i++) scanf("%lld%lld", &p[i].x, &p[i].sum); scanf("%lld%lld", &L, &P); for (int i = 1; i <= n; i++) p[i].x = L - p[i].x; sort(p + 1, p + 1 + n, cmp); if (p[n].x != L){ p[n + 1].x = L; p[n + 1].sum = 0; n++; } int ans = 0; long long pre = 0; for (int i = 1; i <= n; i++) { long long dis = p[i].x - pre; P = P - dis; if (p[i].x == L&&P >= 0) break; if (p[i].x == L) { while (P < 0 && (!q.empty())) { P = P + q.top(); q.pop(); ans++; } if (P < 0) ans = -1; break; } else { pre = p[i].x; if (P == 0) { q.push(p[i].sum); P = P + q.top(); q.pop(); ans++; } else if (P < 0) { while (P < 0 && (!q.empty())) { P = P + q.top(); q.pop(); ans++; } if (P < 0) { ans = -1; break; } else if (P == 0) { q.push(p[i].sum); P = P + q.top(); q.pop(); ans++; } else if (P>0) q.push(p[i].sum); } else q.push(p[i].sum); } } printf("%d\n", ans); } return 0;}

 

转载于:https://www.cnblogs.com/zufezzt/p/5267025.html

你可能感兴趣的文章
从零开始开发微信小程序(三):微信小程序绑定系统账号并授权登录之微信端...
查看>>
[Mysql]——通过例子理解事务的4种隔离级别
查看>>
Java集合体系总结 Set、List、Map、Queue
查看>>
蓝牙心率检测仪涉及到的主要硬件组成
查看>>
easymybatis中字段自动填充
查看>>
Java源码解读扫盲【Integer】
查看>>
Cookie中存储中文异常
查看>>
java 电子商务云平台b2b b2c o2o springmvc+mybatis+spring cloud+spring boot
查看>>
世界杯的狂欢也是黑灰产的狂欢?
查看>>
Eclipse插件系列:jetty插件
查看>>
Ubuntu 下安装ibus日语输入法
查看>>
进击的java(5) spring mvc 文件上传下载
查看>>
Mybatis打印sql语句
查看>>
JSON对象转换成Byte(字节)数组
查看>>
iOS 模拟器卸载
查看>>
yml 配置语法
查看>>
php parse_url()函数
查看>>
如何通过ad收集计算机硬件信息
查看>>
如何通过ad组策略让domain users用户可以远程桌面?
查看>>
[置顶] jquery实现回旋滚动效果
查看>>