一道贪心题,看数据范围就知道要套一个数据结构上去。

别走啊不是什么很高级的数据结构

考虑最朴素的想法,按建筑的抢修时间排序并先拿小的

然后随便想想都可以找到一堆反例

所以我们就直接考虑模拟这个过程,按报废时间排序

我们扫描到一个建筑时,分情况讨论:

  • 如果可以修好,直接拿去修。并且把这个建筑扔到一个堆里(大根堆)。为后面的操作做准备。
  • 如果不能修好,就将这个建筑的修理时间\(t_i\)和堆顶的元素的\(t_j\)比较。若\(t_i<t_j\),我们就弹出堆顶并选择修理这个建筑(也要扔到堆里)

贪心的正确性很好证明,我们在面对一个建筑无法修好时,若可以放弃之前的一个占用时间更大的建筑而转修它,肯定会减少总耗时

CODE

  1. #include<cstdio>
  2. #include<cctype>
  3. #include<queue>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=150005;
  7. priority_queue <int> big;
  8. struct data
  9. {
  10. int t,w;
  11. }a[N];
  12. int n,ans; long long tot;
  13. inline char tc(void)
  14. {
  15. static char fl[100000],*A=fl,*B=fl;
  16. return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
  17. }
  18. inline void read(int &x)
  19. {
  20. x=0; char ch; while (!isdigit(ch=tc()));
  21. while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
  22. }
  23. inline bool cmp(data a,data b)
  24. {
  25. return a.t<b.t;
  26. }
  27. int main()
  28. {
  29. //freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
  30. register int i; read(n);
  31. for (i=1;i<=n;++i)
  32. read(a[i].w),read(a[i].t);
  33. sort(a+1,a+n+1,cmp);
  34. for (i=1;i<=n;++i)
  35. {
  36. if (tot+a[i].w<=a[i].t) tot+=a[i].w,++ans,big.push(a[i].w); else
  37. {
  38. if (a[i].w<big.top()) tot-=big.top(),big.pop(),big.push(a[i].w),tot+=a[i].w;
  39. }
  40. }
  41. return printf("%d",ans),0;
  42. }

Luogu P4053 [JSOI2007]建筑抢修的更多相关文章

  1. 洛谷——P4053 [JSOI2007]建筑抢修

    P4053 [JSOI2007]建筑抢修 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的 ...

  2. 洛谷 P4053 [JSOI2007]建筑抢修

    传送门 思路 首先题意比较容易明白: n个建筑需要修复,只能同时修一个建筑,每个建筑修复需要t1时间,且必须在t2时间前修完,否则此建筑报废 问最多能修好多少个建筑 如果一个建筑在规定时间内没有修好的 ...

  3. P4053 [JSOI2007]建筑抢修

    题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建 ...

  4. 洛谷P4053 [JSOI2007]建筑抢修

    放题解 题目传送门 放代码 #include <bits/stdc++.h>//万能头 #define MAXN 150000//最多的建筑数量(数据范围) using namespace ...

  5. P4053 [JSOI2007]建筑抢修 堆贪心

    思路:堆贪心 提交:1次 题解: 先按时间\(sort\),然后如果能修就直接扔堆里,不能修取堆顶比一下时间长短,把时间短的扔进堆: #include<cstdio> #include&l ...

  6. 题解-------P4053 [JSOI2007]建筑抢修

    传送门 贪心+左偏树 贪心思路:先修快炸的楼 所以我们可以按照$T2$从大到小做一遍排序,然后从$1\cdots n$一个一个去修,如果这栋楼不能修(也就是当前时间已经超过$T2_{i}$),那我们就 ...

  7. 【贪心】【P4053】[JSOI2007] 建筑抢修

    [贪心][P4053][JSOI2007] 建筑抢修 Description 有 \(n\) 个工作,第 \(i\) 个工作做完需要 \(a_i\) 的时间,并且必须在 \(b_i\) 时刻前完成.求 ...

  8. BZOJ1029: [JSOI2007]建筑抢修[模拟 贪心 优先队列]

    1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 3785  Solved: 1747[Submit][Statu ...

  9. BZOJ 1029: [JSOI2007]建筑抢修 堆+贪心

    1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有 ...

随机推荐

  1. Element隐藏组件:scrollbar

    scrollbar是用来替代浏览器原生滚动条的组件,element的文档中并没有对scrollbar的描述. 使用方法:以<el-scrollbar/>包裹要滚动的元素,并设置固定高度.在 ...

  2. css文本属性用法总结

    稍稍总结了下css文本的一些属性用法,自己忘记的时候也可以用来查查,不用去查网站那么麻烦. 下面是部分总结,也希望对其他人有用 文本修饰 (1)text-decoration:  文本修饰(横线) 4 ...

  3. gitlab-ci的注意点

    在使用gitlab搭配gitlab-runner进行ci配置时,发现两个问题,略记如下备忘: 1. 若发现ci job控制台显示无法下载该项目,但当前提交代码人和ci用户都确实具备该项目的访问权限时, ...

  4. RabbitMQ延迟消息学习

    准备做一个禁言自动解除的功能,立马想到了订单的超时自动解除,刚好最近在看RabbitMQ的实现,于是想用它实现,查询了相关文档发现确实可以实现,动手编写了这篇短文. 准备工作 1.Erlang安装请参 ...

  5. Spring Boot(二):Web 综合开发

    详见:http://www.ityouknow.com/springboot/2016/02/03/spring-boot-web.html Web 开发 Spring Boot Web 开发非常的简 ...

  6. gitlab hooks配置

    1.邮件格式过滤 pre-recieive rev_type=commit # Only check the first commit information due to a lot of comm ...

  7. CentOS7:搭建配置SVN服务器

    1. 安装 CentOS通过yum安装subversion. $ sudo yum install subversion subversion安装在/bin目录: $ which svnserve / ...

  8. Linux运维平台工具:pstree、ps、top、htop、free、vmstat、dstat、kill、killall

    1.pstree命令 查看进程树,centos7下统一由systemd进行管理 [root@ELK-chaofeng systemd]# pstree systemd─┬─AliYunDun───*[ ...

  9. C#中类为什么要实例化

    在使用C#语言时,发现一下有关类实例化的问题,在此之前先复习一下类和对象的概念,类是一个抽象体,是对一类事物的抽象体:而对象就是一个具体的事物,对象的抽象就是类.车就是一个类,而车包括面包车,小汽车, ...

  10. ES5数组的遍历方式

    /* 遍历数组 */ var arr=[1,2,3,43,55,66,77,99]; /* 遍历数组 function(item,index) */ arr.forEach(function(item ...