BZOJ 1029: [JSOI2007]建筑抢修【优先队列+贪心策略】
1029: [JSOI2007]建筑抢修
Time Limit: 4 Sec Memory Limit: 162 MB
Submit: 4810 Solved: 2160
[Submit][Status][Discuss]
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
HINT
Source
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1029
分析:首先我们先按照时间限制排序。
贪心的想,对于每一个建筑,我们等它快到限制的时候再修复它。因为是想让数量最多,再贪心的想:我们要选时间尽量短的!
那么我们如果时间允许的话,我们可以把当前值推入(push)队列中,用help先把当前能加的加上去,如果时间不允许的话,也就是如果当前值cost加不上去,但是如果去掉前面一个耗时最长的就能加进去了,那么就把前边最耗时的去掉,加入当前这个较小的值,也就是取出队头的值,加上当前较小的值!
相信我解释了这么久应该都能明白,不懂的话代码中也给出了注释,应该很好理解!
下面给出AC代码:
#include <bits/stdc++.h>
using namespace std;
const int N=;
struct Node
{
int cost;
int ed;
}p[N];
inline int cmp(Node a,Node b)
{
return a.ed<b.ed;
}
bool operator <(const Node &a,const Node &b)
{
return a.cost>b.cost;
}
int i,j,k,l,m,n;
int a[N];
int main()
{
while(scanf("%d",&n)!=EOF)
{
priority_queue<int>q;
memset(a,false,sizeof(a));
int ans=;
for(i=;i<n;i++)
{
scanf("%d%d",&p[i].cost,&p[i].ed);
}
sort(p,p+n,cmp);
int help=;
for(i=;i<n;i++)
{
if(p[i].ed-help-p[i].cost>=)
{
help+=p[i].cost;//先把当前能加的加上去
q.push(p[i].cost);
}
else if(help+p[i].cost-q.top()-p[i].cost>=&&p[i].cost<=q.top())
{
//如果当前这个加不上,但是去掉前边一个耗时最长的就能加进去了,那么就把前边最耗时的去掉,加入当前这个
help-=q.top();
help+=p[i].cost;
q.pop();
q.push(p[i].cost);
}
}
printf("%d\n",q.size());
}
return ;
}
BZOJ 1029: [JSOI2007]建筑抢修【优先队列+贪心策略】的更多相关文章
- BZOJ 1029: [JSOI2007]建筑抢修 堆+贪心
1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有 ...
- BZOJ 1029 [JSOI2007] 建筑抢修(贪心)
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 2285 Solved: 1004[Submit][Statu ...
- BZOJ 1029: [JSOI2007]建筑抢修 优先队列
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- [BZOJ 1029] [JSOI2007] 建筑抢修 【贪心】
题目链接:BZOJ - 1029 题目分析 使用一种贪心策略. 现将任务按照deadline从小到大排序. 然后枚举每一个任务,如果当前消耗的时间加上完成这个任务的时间不会超过这个任务的deadlin ...
- bzoj 1029: [JSOI2007]建筑抢修 (优先队列)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1029 思路: 按结束时间排序,优先选结束时间短的,选完后扔到优先队列里(大的优先),如果选到 ...
- bzoj 1029: [JSOI2007]建筑抢修【贪心+堆】
第一想法是按照结束时间贪心,但是这样有反例 所以先按照t贪心,能选则选,把选的楼的持续时间放进大根堆里,当当前的楼不能选的时候如果当前的持续时间比大根堆里最大的要小,就用这个替换最大,这样总数不变但是 ...
- BZOJ 1029 [JSOI2007]建筑抢修 (贪心 + 优先队列)
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 5452 Solved: 2422[Submit][Statu ...
- BZOJ 1029 [JSOI2007]建筑抢修 已更新
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 2748 Solved: 1213[Submit][Statu ...
- BZOJ 1029: [JSOI2007]建筑抢修
1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有 ...
随机推荐
- 关于博客中引用多媒体出现的bug说明
插件说明 Aplayer.Dplayer @DIYgod 大佬在gihub的开源项目,对此,表示非常之感谢!! Aplayer 支持放在页首 支持放在页尾 但是不支持直接放在文章中引用 解决方法: 1 ...
- stack 的优势 - 每天5分钟玩转 Docker 容器技术(113)
stack 将应用所包含的 service,依赖的 secret.voluem 等资源,以及它们之间的关系定义在一个 YAML 文件中.相比较手工执行命令或是脚本,stack 有明显的优势. YAML ...
- 507. Perfect Number
We define the Perfect Number is a positive integer that is equal to the sum of all its positive divi ...
- Qt仿win7自动顶部最大化左侧右侧半屏效果
Win7系统不得不说是非常好用的,也是目前为止占用份额最大的操作系统,其中win7有个效果,将窗体拖动到顶部时会自动最大化,拖动到左侧右侧时会自动半屏显示,再次拖动窗体到其他位置,会重新恢复之前的大小 ...
- Python 错误 UnicodeEncodeError: 'ascii' codec can't encode character 的解决方案
一.使用workbook.get_sheet_by_name(name) 获取excel一个工作表时,发生字符集解析的错误. 网上搜集解决方案为添加以下三句: import sys reload(sy ...
- python 中一些关键字的区别
一.raw_input 和input input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的 1.当输入为纯数字时 input返回的是数值类型, ...
- 一起学Linux04之Linux文件基本属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 为了介绍文件属性,首 ...
- Python学习_01_对象
之前关于python的知识比较零散,这一个系列的随笔将python重新学习整理一遍.学习书籍<Python核心编程>第二版. Python对象基础 python并不是一个单纯面向对象的语言 ...
- 物流包裹一站式查询(TrackingMore)
快递查询接口 目前提供快递查询的接口平台有: Trackingmore 快递100 快递网 不同接口的区别: (1)Trackingmore支持380家快递公司,其中有55家为国内的快递,其余325家 ...
- K:二叉树的非递归遍历
相关介绍: 二叉树的三种遍历方式(先序遍历,中序遍历,后序遍历)的非递归实现,虽然递归方式的实现较为简单且易于理解,但是由于递归方式的实现受其递归调用栈的深度的限制,当递归调用的深度超过限制的时候, ...