[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 把任务按截止时间从小到大排序 如果当前时间+当前任务耗时<=当前任务截止时间,把这个任务 ...
随机推荐
- Oracle函数大全下载
Oracle函数大全下载 是一个压缩包,里面是一个chm格式的帮助文档,很实用.
- 学JAVA第二十二天,StringBuffer的好处
五一的假期今天就结束了,又要回来上课了. 今天就写一下StringBuffer的好处吧. StringBuffer类的对象能够被多次的修改,并且不产生新的未使用对象. 也就是说,我们平时用String ...
- hihocoder编程练习赛52-3 部门聚会
思路: 树形dp. 实现: #include <bits/stdc++.h> using namespace std; ; int n, a[MAXN], in[MAXN]; vector ...
- java 生成特定范围内的随机数
/** * 生成[1, max]之间的随机数 */ public static Integer getRandomNumber(Integer max) { Random rd = new Rando ...
- 短视频SDK用于旅游行业
超级简单易用的短视频SDK来自RDSDK.COM.锐动天地为开发者提供短视频编辑.视频直播.特效.录屏.编解码.视频转换,等多种解决方案,涵盖PC.iOS.Android多平台.以市场为导向,不断打磨 ...
- 【译】x86程序员手册39-10.3切换到保护模式
10.3 Switching to Protected Mode 切换到保护模式 Setting the PE bit of the MSW in CR0 causes the 80386 to b ...
- bdflush - 将dirty缓存写回到磁盘的核心守护进程
总览(SYNOPSIS) bdflush [opt] 描述(DESCRIPTION) bdflush 被用来启动核心守护进程将内存中的dirty缓存写到磁盘上.真正清洁工作是一个核心程序完成的. bd ...
- vue面试相关
(1)什么是mvvm? MVVM是Model-View-ViewModel的缩写.mvvm是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑:View ...
- 修改python注册表
转自:http://blog.csdn.net/u014680513/article/details/51005650 # script to register Python 2.0 or later ...
- spring封装的RabbitMQ
spring这么牛逼的团队,封装了RabbitMQ,简化了RabbitMQ的使用,那肯定是要使用spring-rabbit了 一.简介 二.使用方法 1.消费者 public class Foo { ...