【每日一题】37. [JSOI2007]建筑抢修 (优先队列 + 贪心)
补题链接:Here
算法涉及:优先队列 + 贪心
因为每一个都有截止时间,按照截止时间排序下来,
如果修复这个工程的时间+修复这个之前的总时间<=截止时间。那么就是可以在规定的时间内完成。
保证在规定的时间内完成的数量最多。
如果修复这个工程的时间+修复这个之前的总时间>截止时间。就是时间超限这个工程不能完成:
在这里要细想一下:不能完成的时候,如果修复当前这个工程的时间比修复之前工程的最大时间要短,就是可以总时间上更优,我当然是选择修复这个而不是去修复那个时间比较长的。//这样保证时间最短。
因为我们是按截止时间排的序,所以上个能完成的这个也就一定能完成。
我们每次都要找到之前修复工程时间最长的,所以可以直接用一个优先队列来维护修复工程时间最长的。
#define x first
#define y second
const int N = 150000 + 10; // 别开小了
pair<int, int>a[N];
void solve() {
int n; cin >> n;
for (int i = 1; i <= n; ++i)cin >> a[i].y >> a[i].x;
sort(a + 1, a + 1 + n);
int now = 0, cnt = 0;
priority_queue<int>q;
for (int i = 1; i <= n; ++i) {
if (now + a[i].y <= a[i].x) {
now += a[i].y;
cnt++;
q.push(a[i].y);
} else if (q.top() > a[i].y) {
now -= q.top(), now += a[i].y;
q.pop(), q.push(a[i].y);
}
}
cout << cnt << "\n";
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 全程不用写代码,我用AI程序员写了一个飞机大战