各种瞎写

之后也不知道为什么就过了

刚看到这道题感觉确实是不会的,因为我贪心太差了\(QAQ\)

之后就随便\(yy\)呗

发现首先我们得排一下序,以\(t2\)也就是建筑的损坏时间为第一关键字从小到大排序

这个还是比较好考虑的,我们得优先照顾一下那些在最开始就会损坏的建筑

那之后呢,好像我们现在可以做一个\(dp\)了

我们设\(dp[i][j]\)表示在前\(i\)个里选择\(j\)个的最小时间是多少

这个\(dp\)的状态数就是\(n^2\)的,尽管我们可以\(O(1)\)转移,但是还是炸了

我们考虑一下贪心

我们还是按照刚才的排序来考虑

显然这样直接按照排出来的顺序扫一遍是不行的,我们得给前面的选择一个反悔的机会

于是我们开一个大根堆,用来存储之前选择的那些建筑的修筑时间

我们一旦新插入一个建筑,如果这个建筑可以被修筑,也就是\(t1_i+tot<=t2_i\),\(tot\)表示之前所选取的建筑的总时间和,那么我们就让这个建筑被修建

否则的话,我们把这个建筑和堆顶比较一下,看一看能否用这个元素取代堆顶,使得再删除堆顶的情况下这个建筑能否被选上,能的话就选上,否则就不选

至于这样为什么对呢,每一个建筑的价值都是\(1\),所以对于第二种情况来说它入堆的话就必须保证这个建筑能被选上且让这个建筑在被选上的情况下总时间最短,否则就还不如不选这个建筑

代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. #include<algorithm>
  6. #define LL long long
  7. #define re register
  8. #define maxn 150005
  9. #define max(a,b) ((a)>(b)?(a):(b))
  10. struct Node
  11. {
  12. int t1,t2;
  13. }a[maxn];
  14. std::priority_queue<int> q;
  15. inline int cmp(Node K,Node M)
  16. {
  17. return K.t2<M.t2;
  18. }
  19. inline int read()
  20. {
  21. char c=getchar();
  22. int x=0;
  23. while(c<'0'||c>'9') c=getchar();
  24. while(c>='0'&&c<='9')
  25. x=(x<<3)+(x<<1)+c-48,c=getchar();
  26. return x;
  27. }
  28. int n;
  29. int now=0,ans=0;
  30. int main()
  31. {
  32. n=read();
  33. for(re int i=1;i<=n;i++)
  34. a[i].t1=read(),a[i].t2=read();
  35. std::sort(a+1,a+n+1,cmp);
  36. LL tot=0;
  37. for(re int i=1;i<=n;i++)
  38. {
  39. if(tot+a[i].t1<=a[i].t2)
  40. {
  41. tot+=a[i].t1;
  42. now++;
  43. q.push(a[i].t1);
  44. ans=max(ans,now);
  45. }
  46. else
  47. {
  48. if(a[i].t1>q.top()) continue;
  49. if(a[i].t1+tot-q.top()<=a[i].t2)
  50. {
  51. tot-=q.top();
  52. q.pop();
  53. tot+=a[i].t1;
  54. q.push(a[i].t1);
  55. }
  56. }
  57. }
  58. std::cout<<ans;
  59. return 0;
  60. }

【[JSOI2007]建筑抢修】的更多相关文章

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

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

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

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

  3. BZOJ1029: [JSOI2007]建筑抢修(贪心)

    题目链接:BZOJ1029: [JSOI2007]建筑抢修 题解:贪心思想,按结束时间从小到大排序,选花费时间尽量短的建筑维修,用堆维护. #include<stdio.h> #inclu ...

  4. BZOJ 1029 [JSOI2007] 建筑抢修(贪心)

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

  5. BZOJ 1029 [JSOI2007]建筑抢修 已更新

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

  6. BZOJ 1029: [JSOI2007]建筑抢修

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

  7. 1029: [JSOI2007]建筑抢修

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

  8. BZOJ 1029: [JSOI2007]建筑抢修【优先队列+贪心策略】

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

  9. BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆

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

  10. BZOJ 1029 [JSOI2007]建筑抢修 (贪心 + 优先队列)

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

随机推荐

  1. RabbitMQ---7、常见参数含义

    简介 本节主要讨论队列声明的各个参数 queueDeclare(String queue, boolean durable, boolean exclusive, Map<String, Obj ...

  2. 编写更好的jQuery代码(转)

    这是一篇关于jQuery的文章,写到这里给初学者一些建议. 原文地址:http://flippinawesome.org/2013/11/25/writing-better-jquery-code/ ...

  3. FE面试题库

    一.HTML 序号 面试题目 难度等级 回答要点 H1 简述编写HTML需要注意哪些事项? ☆ DOCTYPE.charset.viewport.语义化.CSS与JS的位置.DOM层级.结构样式行为的 ...

  4. Bundle传递数据,Handler更新UI

    Bundle主要用于传递数据:它保存的数据,是以key-value(键值对)的形式存在的. Bundle经常使用在Activity之间或者线程间传递数据,传递的数据可以是boolean.byte.in ...

  5. HBase—列族数据库的术语

    1. 列族数据库的基本组件 键空间,行键,列,列族 2. 什么是键空间 keyspace? 键空间 keyspace 是列族数据库的顶级数据结构,它在逻辑上能够容纳列族,行键以及与之相关的其他数据结构 ...

  6. Influxdb的存储引擎

    创建Influxdb数据库时,我们可以看到下面选项,每个选项的含义就是本文要描述的: Influxdb内部数据的存储可以使用不同的存储引擎.当前0.8.7版本支持的是LevelDB, RocksDB, ...

  7. tcp程序设计--客户端获取服务器输入输出流

    tcp程序设计--客户端获取服务器输入输出流 思路: 第一步:实例化一个ServerSocket对象(服务器套接字),用来等待网络上的请求(也就是等待来连接的套接字) 第二步:调用accept()方法 ...

  8. docker 卸载

    1首先搜索已经安装的docker 安装包 [root@localhost ~]# yum list installed|grep docker 或者使用该命令 [root@localhost ~]# ...

  9. Jquery中动态生成的元素没有点击事件或者只有一次点击事件

    今天用jq做动态生成的元素的click事件时,click只执行了一次,当然有些朋友可能根本没执行, 执行了一次的原因是因为可能有函数加载了一遍,一次都没执行的可能是没绑定对象或者jq版本问题, 动态生 ...

  10. baidu地图api , 地理位置转 经纬度接口

    更多可以查看    http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding 地理编码示例: 以下是关于地理编 ...