【每日一题】建筑抢修

[JSOI2007]建筑抢修

https://ac.nowcoder.com/acm/problem/20154

题意

栋建筑,第 栋建筑需要 时间修,截止到 时间,问最多可以修多少建筑。

solution

我们可以类比成写作业,先截止的我们会先做,这是大体的贪心策略。但他并不是最优的,因为可能那一科会花你非常多的时间,够你做更多的科目,得不偿失。因此我们用优先队列维护做过的作业中花费时间最大的那份,当目前要做的作业时间不够的时候,与这个最大值比较看是否花的时间更少,可行的话就把这个塞进去,那个丢出来,这样做了同样多的作业却花了更少的时间,同时维护答案。

Code

#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
const int N = 5e5 + 5;
int n, sum, res;
pair<int, int> p[N];
priority_queue<int> q;
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) cin >> p[i].y >> p[i].x;
  sort(p, p + n);
  for (int i = 0; i < n; i++) {
    if (sum + p[i].y <= p[i].x) {
      sum += p[i].y;
      res++;
      q.push(p[i].y);
    } else if (p[i].y < q.top()) {
      sum -= q.top();
      q.pop();
      q.push(p[i].y);
      sum += p[i].y;
    }
  }
  cout << res << '\n';
  return 0;
}
全部评论

相关推荐

2025-12-15 14:16
门头沟学院 Java
回家当保安:发offer的时候会背调学信网,最好不要这样。 “27届 ”和“28届以下 ”公司招聘的预期是不一样的。
实习简历求拷打
点赞 评论 收藏
分享
Tom哥981:这份简历是“大一新生硬凹资深后端”的典型反面教材,槽点离谱到能让面试官直接笑出声: ### 1. 「年龄+入学时间」和项目复杂度完全脱节,可信度直接归0 你2024年7月才入学(现在刚读了1年多),19岁的大一新生,能把Vue3+Spring Boot+ShardingSphere+K8s+AI这些技术全塞进两个项目里?别说实际开发,光把这些技术的文档看完都得半年——这不是“能力强”,是“把招聘JD里的技术词全抄过来造假”,明摆着没碰过实际代码
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务