博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[洛谷P2107]小Z的AK计划
阅读量:6731 次
发布时间:2019-06-25

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

题目大意:有$n$个物品,第$i$个物品在$p_i$,大小为$w_i$,你在$0$,要求移动距离加上大小总和小于$m$,问你最多可以拿多少物品

题解:贪心, 按距离排序,每次遇到一个物品就把大小加入一个大根堆,若堆中元素大小和加上距离大于$m$,就把最大值删去,直到符合

卡点:

 

C++ Code:

#include 
#include
#include
#define maxn 100010long long n, m, ans;struct node { long long t, d; inline bool operator < (const node &rhs) const {return d < rhs.d;}} s[maxn];std::priority_queue
q;int main() { scanf("%lld%lld", &n, &m); for (int i = 1; i <= n; i++) { scanf("%lld%lld", &s[i].d, &s[i].t); } std::sort(s + 1, s + n + 1); long long res = 0, sum = 0; for (int i = 1; i <= n; i++) { if (s[i].d > m) break; q.push(s[i].t); sum += s[i].t; res++; while (sum + s[i].d > m) { sum -= q.top(); q.pop(); res--; } ans = std::max(res, ans); } printf("%lld\n", ans); return 0;}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/9863520.html

你可能感兴趣的文章
jQuery的DOM操作
查看>>
linux下软链接与硬链接及其区别
查看>>
ZooKeeper使用命令大全
查看>>
阿里大文娱总裁樊路远:杨伟东事件值得警醒 优酷将全面整顿
查看>>
iOS Xcode快捷键
查看>>
es6摇一摇类库
查看>>
Ant Desing Pro2.0(二)新增页面
查看>>
LeetCode 319. Bulb Switcher
查看>>
第一个springboot项目
查看>>
Prometheus 500 Internal Privoxy Error 异常解决
查看>>
2018年前端面试题(秋季面试随意整理的)
查看>>
深圳Android技术大会分享
查看>>
requestAnimationFrame 兼容方案
查看>>
Java™ 教程(管理源文件和类文件)
查看>>
Linux运维之路-安全防护OpenResty
查看>>
说说不知道的Golang中参数传递
查看>>
深入解析Vue底层实现原理
查看>>
es6之解构赋值
查看>>
如何用外部程序优化SQL语句中的IN和EXISTS
查看>>
webpack学习进阶(一)
查看>>