各种瞎写

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

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

之后就随便\(yy\)呗

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

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

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

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

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

我们考虑一下贪心

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

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

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

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

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

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

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#define LL long long
#define re register
#define maxn 150005
#define max(a,b) ((a)>(b)?(a):(b))
struct Node
{
int t1,t2;
}a[maxn];
std::priority_queue<int> q;
inline int cmp(Node K,Node M)
{
return K.t2<M.t2;
}
inline int read()
{
char c=getchar();
int x=0;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=getchar();
return x;
}
int n;
int now=0,ans=0;
int main()
{
n=read();
for(re int i=1;i<=n;i++)
a[i].t1=read(),a[i].t2=read();
std::sort(a+1,a+n+1,cmp);
LL tot=0;
for(re int i=1;i<=n;i++)
{
if(tot+a[i].t1<=a[i].t2)
{
tot+=a[i].t1;
now++;
q.push(a[i].t1);
ans=max(ans,now);
}
else
{
if(a[i].t1>q.top()) continue;
if(a[i].t1+tot-q.top()<=a[i].t2)
{
tot-=q.top();
q.pop();
tot+=a[i].t1;
q.push(a[i].t1);
}
}
}
std::cout<<ans;
return 0;
}

【[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. 屏蔽F1~F12的快捷键的js函数

    function window.onhelp(){return false} //屏蔽F1帮助 /*keyCod从113-123分别禁用了F2-F12键,13禁用了回车键(Enter),8禁用了退格键 ...

  2. C# 学习笔记(一) Winform利用Assembly反射动态创建窗体

    1. 添加Reflection //添加对Reflection程序集引用 using System.Reflection; // 引用窗体创建方法CreateForm,传入参数 private voi ...

  3. Cookie写入之path的坑

    问题 我在/page/index/index.html中向浏览器添加了一个useid的cookie(这里没有指定path), 然后试着从/page/demo/demo.html中取值,发现无法取到, ...

  4. java web工程web.xml介绍

    转载自:http://blog.csdn.net/believejava/article/details/43229361 Web.xml详解: 1.web.xml加载过程(步骤) 首先简单讲一下,w ...

  5. 利用PHP QR Code生成二维码(带logo)

    转自:http://www.cnblogs.com/txw1958/p/phpqrcode.html HP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示 ...

  6. jQuery和MVVM类框架的编程区别点

    本文说的mvvm框架以react为列,其他应该也是类似的: react实际上仅仅是帮助我们再View层简化,让我们仅仅需要专注数据,只要数据改变,所有的视图就会自己跟随着改变, 本人自己做react项 ...

  7. C# 读取excel用户列表过滤一个月内未收到外部邮件已离职的员工

    1.通过aspose.cells读取excel中的数据并添加到list中 //存储从excel中读取出来的数据 List<UserInfo> lst_userinfo = new List ...

  8. MongoDB for Java

    开发环境 操作系统:Windows7 IDE: MyEclipse Database: MongoDB 开发依赖库 bson-3.0.1.jar mongodb-driver-3.0.1.jar mo ...

  9. 学习ssm心得

    学习是一个探索的过程,在我编程能力提高的阶段中,我发现在编写代码之前,必须得弄清代码的逻辑,我到底要干什么,从哪一步做起.端与端之间该怎么衔接. 先把问题想清楚,再去编写.不要急着去乱敲一通,一点用处 ...

  10. RocketMQ读书笔记7——吞吐量优先的场景

    [Broker端进行消息过滤] 在Broker端进行消息过滤,可以减少无效消息发送到Consumer,少占用网络宽带从而提高吞吐量. [过滤方式1——通过Tag过滤] [ 关于Tag和Key ] 对一 ...