[BZOJ1029] [JSOI2007]建筑抢修(贪心 + 优先队列)
把数据存在结构体中,至于怎么贪心?
肯定会有些想法,正确错误先不必说,先来试一试。
1.按照 t2 为第一关键字从小到大排,按照 t1 为第二关键字从小到大排
这个显然错,比如后面有个数的 t1 比前面小,t2 比前面大,显然用这个代替前面的更优
2.按照 t1 为第一关键字从小到大排,按照 t2 为第二关键字从小到大排
这个也是错的,比如
4
1 1
1 5
3 4
4 5
按照这个贪心是 2,实际应该是 3
至于正确贪心,如果 当前时间 + t1[i] <= t2[i],说明可以建完,ans++,并把 t1 放入大根堆
如果 当前时间 + t1[i] > t2[i],说明不能建,那么把当前的 t1[i] 和堆顶比较
如果 > 堆顶,continue
如果 < 堆顶,如果 当前时间 - 堆顶 + t1[i] <= t2[i],说明拿它替换堆顶更优,那么就替换,ans++
#include <cstdio>
#include <queue>
#include <algorithm> int n, time, ans;
struct node
{
int a, b;
}p[];
std::priority_queue <int> q; inline bool cmp(node x, node y)
{
return x.b < y.b;
} int main()
{
int i;
scanf("%d", &n);
for(i = ; i <= n; i++) scanf("%d %d", &p[i].a, &p[i].b);
std::sort(p + , p + n + , cmp);
for(i = ; i <= n; i++)
{
if(time + p[i].a <= p[i].b)
{
time += p[i].a;
ans++;
q.push(p[i].a);
}
else if(p[i].a < q.top())
{
if(time - q.top() + p[i].a <= p[i].b)
{
time = time - q.top() + p[i].a;
q.pop();
q.push(p[i].a);
}
}
}
printf("%d", ans);
return ;
}
我真是菜啊,错误的贪心都举不出来反例,只有对拍出来。
[BZOJ1029] [JSOI2007]建筑抢修(贪心 + 优先队列)的更多相关文章
- BZOJ1029: [JSOI2007]建筑抢修(贪心)
		
题目链接:BZOJ1029: [JSOI2007]建筑抢修 题解:贪心思想,按结束时间从小到大排序,选花费时间尽量短的建筑维修,用堆维护. #include<stdio.h> #inclu ...
 - BZOJ 1029  [JSOI2007]建筑抢修 (贪心 + 优先队列)
		
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 5452 Solved: 2422[Submit][Statu ...
 - [JSOI2007] 建筑抢修 (贪心 + 优先队列)
		
小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会 ...
 - [luogu4053 JSOI2007] 建筑抢修 (贪心 优先队列)
		
传送门 题目描述 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤 ...
 - BZOJ1029:[JSOI2007]建筑抢修(贪心,堆)
		
Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的 入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快 ...
 - [JSOI2007]建筑抢修(贪心+后悔)
		
[JSOI2007]建筑抢修(贪心+后悔) 洛谷题目传送门 吐槽 这是一道经典的贪心后悔的题目 做过贪心加后悔的题目的应该一眼可以看出来 解题思路 首先按倒塌时间T2排序,再从1枚举到n,能修就修,发 ...
 - BZOJ1029: [JSOI2007]建筑抢修[模拟 贪心 优先队列]
		
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 3785 Solved: 1747[Submit][Statu ...
 - BZOJ 1029: [JSOI2007]建筑抢修【优先队列+贪心策略】
		
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 4810 Solved: 2160[Submit][Statu ...
 - bzoj1029: [JSOI2007]建筑抢修(堆+贪心)
		
1029: [JSOI2007]建筑抢修 题目:传送门 题解: 一道以前就做过的水题(找个水题签个到嘛...) 很明显就是一道贪心题,这里我们用一个堆来维护 具体看代码吧,很容易YY所以不讲 代码: ...
 - bzoj千题计划119:bzoj1029: [JSOI2007]建筑抢修
		
http://www.lydsy.com/JudgeOnline/problem.php?id=1029 把任务按截止时间从小到大排序 如果当前时间+当前任务耗时<=当前任务截止时间,把这个任务 ...
 
随机推荐
- Android推送服务(2)微信智能心跳方案
			
http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=207243549&idx=1&sn=4ebe4beb8123f1b5 ...
 - swiper4初始化/swiper-init/data-swiper
			
用data属性初始化swiper <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
 - 仿陌陌的ios客户端+服务端源码
			
软件功能:模仿陌陌客户端,功能很相似,注册.登陆.上传照片.浏览照片.浏览查找附近会员.关注.取消关注.聊天.语音和文字聊天,还有拼车和搭车的功能,支持微博分享和查找好友. 后台是php+mysql, ...
 - 四则运算  来自 http://www.cnblogs.com/ys1101/p/4368103.html
			
#include<stdio.h> #include<math.h> #include<windows.h> ; ; void add() { int a,b,c, ...
 - day21-5 类的多态与多态性
			
类的多态与多态性 多态 多态指的是一类事物有多种形态,如动物有多种形态:人.狗.猪 import abc class Animal(metaclass=abc.ABCMeta): # 同一类事物:动物 ...
 - TensorFlow低阶API(一)—— 简介
			
简介 本文旨在知道您使用低级别TensorFlow API(TensorFlow Core)开始编程.您可以学习执行以下操作: 管理自己的TensorFlow程序(tf.Graph)和TensorFl ...
 - xamarin.forms 绑定页面里指定元素的某个属性值
			
{Binding Source={x:Reference elementName}, Path=BindingContext.propertyname, Mode=OneWay} elementNam ...
 - 02Document Type Definition
			
Document Type Definition 1. Document Type Definition DTD(Document Type Definition)文件格式定义作用是给予文件一种格(T ...
 - hdfs深入:03、hdfs的架构以及副本机制和block块存储
			
HDFS分布式文件系统设计目标 1. 硬件错误 由于集群很多时候由数量众多的廉价机组成,使得硬件错误成为常态 2. 数据流访问 所有应用以流的方式访问数 ...
 - for in,Object.keys()与for of的用法与区别
			
Array.prototype.sayLength=function(){ console.log(this.length); } let arr = ['a','b','c','d']; arr.n ...