BZOJ1029:[JSOI2007]建筑抢修(贪心,堆)
Description
小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的
入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全
毁坏。现在的情况是:T部落基地里只有一个修理工人,虽然他能瞬间到达任何一个建筑,但是修复每个建筑都需
要一定的时间。同时,修理工人修理完一个建筑才能修理下一个建筑,不能同时修理多个建筑。如果某个建筑在一
段时间之内没有完全修理完毕,这个建筑就报废了。你的任务是帮小刚合理的制订一个修理顺序,以抢修尽可能多
的建筑。
Input
第一行是一个整数N接下来N行每行两个整数T1,T2描述一个建筑:修理这个建筑需要T1秒,如果在T2秒之内还
没有修理完成,这个建筑就报废了。
Output
输出一个整数S,表示最多可以抢修S个建筑.N < 150,000; T1 < T2 < maxlongint
Sample Input
100 200
200 1300
1000 1250
2000 3200
Sample Output
3
Solution
贪心……果然我还是太单纯善良了一点都不贪(?)
一开始无从下手,毕竟两个值,该以哪个为标准呢?
所以我们就按照T2排序好了……
对于当前建筑,如果时间来得及那就最好不过了,我们修复它
如果时间来不及,就从大根堆里面挑出来一个
(堆里放的是已经修好的建筑的花费)
若当前建筑需要的花费时间比堆顶小,那么修堆顶的那个还不如修当前的这个
毕竟赚到的都是一个建筑……可是当前的花费小啊
至于为什么按T2排序……
反正xjb贪就对了【滑稽】
我觉得如果不按T2排序的话可能是防止一些不需要很提前修改的建筑被提前修改
如下面的数据,正解是5
5
1 2
2 100
10 13
1 5
1 5
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<algorithm>
#define LL long long
using namespace std;
struct node
{
LL x,y;
}a[];
bool cmp(node a,node b)
{
return a.y<b.y;
}
priority_queue<LL>q;
int main()
{
LL n;
scanf("%lld",&n);
for (LL i=;i<=n;++i)
scanf("%lld%lld",&a[i].x,&a[i].y);
sort(a+,a+n+,cmp);
LL now=,Ans=;
for (LL i=;i<=n;++i)
{
if (now+a[i].x<=a[i].y)
{
++Ans;
now+=a[i].x;
q.push(a[i].x);
}
else
if (a[i].x<q.top())
{
now=now-q.top()+a[i].x;
q.pop();
q.push(a[i].x);
}
}
printf("%lld",Ans);
}
BZOJ1029:[JSOI2007]建筑抢修(贪心,堆)的更多相关文章
- BZOJ1029: [JSOI2007]建筑抢修(贪心)
题目链接:BZOJ1029: [JSOI2007]建筑抢修 题解:贪心思想,按结束时间从小到大排序,选花费时间尽量短的建筑维修,用堆维护. #include<stdio.h> #inclu ...
- 【bzoj1029】[JSOI2007]建筑抢修 贪心+堆
题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建 ...
- BZOJ 1029 JSOI2007 建筑抢修 贪心+堆
题目大意:n个建筑须要抢修.第i个建筑须要T1时间抢修.必须在T2时间之前抢修完成.求最多能抢修多少建筑 首先我们对T2排序 然后依次修理 可是这样贪心显然是不对的 比方说这组数据: 5 10 10 ...
- [JSOI2007]建筑抢修(贪心+后悔)
[JSOI2007]建筑抢修(贪心+后悔) 洛谷题目传送门 吐槽 这是一道经典的贪心后悔的题目 做过贪心加后悔的题目的应该一眼可以看出来 解题思路 首先按倒塌时间T2排序,再从1枚举到n,能修就修,发 ...
- bzoj1029: [JSOI2007]建筑抢修(堆+贪心)
1029: [JSOI2007]建筑抢修 题目:传送门 题解: 一道以前就做过的水题(找个水题签个到嘛...) 很明显就是一道贪心题,这里我们用一个堆来维护 具体看代码吧,很容易YY所以不讲 代码: ...
- BZOJ1029: [JSOI2007]建筑抢修[模拟 贪心 优先队列]
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 3785 Solved: 1747[Submit][Statu ...
- BZOJ 1029 建筑抢修 贪心+堆
又搞了一晚上OI,编了两道BZOJ和几道NOI题库,临走之前写两篇感想 noip越来越近了,韩大和clove爷已经开始停课虐我们了... 1029: [JSOI2007]建筑抢修 Time Limit ...
- bzoj千题计划119:bzoj1029: [JSOI2007]建筑抢修
http://www.lydsy.com/JudgeOnline/problem.php?id=1029 把任务按截止时间从小到大排序 如果当前时间+当前任务耗时<=当前任务截止时间,把这个任务 ...
- BZOJ 1029 [JSOI2007]建筑抢修 (贪心 + 优先队列)
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 5452 Solved: 2422[Submit][Statu ...
随机推荐
- SqlSerVer 列与逗号分隔字符串 互相转换
在项目中,使用SQLServer数据库,有一个需求,需要将数据库的某一列,转换成逗号分隔的字符串.同时,需要将处理完的字符串,转换成为一列. 经过查阅资料与学习,通过以下方式可以实现如上所述需求: 1 ...
- mybatis-plus之Mapper CRUD接口和 Service CRUD 接口
中文官网链接: https://mp.baomidou.com/guide/crud-interface.html
- Less与Sass框架
一.Less语法 1.变量声明: @变量名:变量值; @newHeight:20px; 2.调用变量: .box { width: @newHeight; height: @newHeight; } ...
- Web 系统架构一般组成
负载层技术 负载分配层,是单指利用软件实现的计算机系统上的狭义负载均衡.它是根据业务形态设计一种架构方式,将来自外部客户端的业务请求分担到每一个可用的业务节点上 . 1.用户终端不只包括类 ...
- AR中的SLAM(一)
写在前面 本系列打算讲讲个人对AR行业和AR中的SLAM算法的一点浅显的看法.才疏学浅,文中必然有很多疏漏和不足,还望能和大家多多讨论.今天先讲讲我对AR的一些认识. AR的一点理解 AR是什么 AR ...
- PS制作gif动图以及背景透明与消除残影
摘要: 用Photoshop制作gif动画的要点:在窗口菜单中找到“时间轴”选中打开时间轴,单击一帧,设置该帧显示持续时间在图层里将该帧要显示的图层显示,并将不该显示的层隐藏,新建一帧,接下来就是重复 ...
- ecloipse背景修改豆沙
Eclipse背景色的修改 Eclipse背景色的修改,修改为豆沙色 值是85 123 205 一.修改编辑区 ①这个比较简单一般都会不多说. 1.首先点击Window 然后选择Preferen ...
- mysql 运行 sql 脚本
方式一: 打开脚本,复制里面的全部内容,登陆数据库后运行. 方式二: window cmd 运行如下命令: mysql -u root -proot --port 3306 <D:\simple ...
- 通过Places API Web Service获取兴趣点数据
实验将爬取新加坡地区的银行POI数据 数据库采用mongodb,请自行安装,同时申请google的key 直接上代码 #coding=utf-8 import urllib import json i ...
- elipse安装php
在用eclipse作为PHP的开发IDE工具时,如果下载的Eclipse不带有PHP功能,则需要我们自己来给Eclipse升级.不过也可以下载eclipseForPHP 在Eclipse的help菜单 ...