【[JSOI2007]建筑抢修】
各种瞎写
之后也不知道为什么就过了
刚看到这道题感觉确实是不会的,因为我贪心太差了\(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]建筑抢修】的更多相关文章
- BZOJ1029: [JSOI2007]建筑抢修[模拟 贪心 优先队列]
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 3785 Solved: 1747[Submit][Statu ...
- BZOJ 1029: [JSOI2007]建筑抢修 堆+贪心
1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有 ...
- BZOJ1029: [JSOI2007]建筑抢修(贪心)
题目链接:BZOJ1029: [JSOI2007]建筑抢修 题解:贪心思想,按结束时间从小到大排序,选花费时间尽量短的建筑维修,用堆维护. #include<stdio.h> #inclu ...
- 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 MBSubmit: 2748 Solved: 1213[Submit][Statu ...
- BZOJ 1029: [JSOI2007]建筑抢修
1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有 ...
- 1029: [JSOI2007]建筑抢修
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 2382 Solved: 1033[Submit][Statu ...
- BZOJ 1029: [JSOI2007]建筑抢修【优先队列+贪心策略】
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 4810 Solved: 2160[Submit][Statu ...
- BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆
BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是 ...
- BZOJ 1029 [JSOI2007]建筑抢修 (贪心 + 优先队列)
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 5452 Solved: 2422[Submit][Statu ...
随机推荐
- Command操作数据
Command常用属性 CommandText 要下达至数据源的命令 CommandTimeout 出错时等待时间 //定义一个变量来存储对数据库操作的字符串 ...
- Docker学习之Docker容器基本使用
Docker学习之Docker容器基本使用 新建容器并启动 命令格式:docker run --options repository:tag 后台运行 命令格式:-d 已存在的容器相关操作 启动:do ...
- shell条件测试和流程控制
一.条件测试操作 1.test 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值 格式:test 表达式 2.常见的测试类型 ①测试文件状态 格式:[ 操作符 文件 ...
- JSP简单实现统计网页访问次数
JSP简单实现统计网页访问次数 需求:统计网页的访问次数 核心思想:利用application对象,将访问次数的信息放入application对象中,每次访问就+1.这里利用了application对 ...
- Jquery中动态生成的元素没有点击事件或者只有一次点击事件
今天用jq做动态生成的元素的click事件时,click只执行了一次,当然有些朋友可能根本没执行, 执行了一次的原因是因为可能有函数加载了一遍,一次都没执行的可能是没绑定对象或者jq版本问题, 动态生 ...
- HTML基本结构及标签样式
<!DOCTYPE html>————声明 <html> <head>————头部设置信息 <title>文件标题</title> < ...
- Working C# code for MySql5.5 Stored Procedures IN parameters
MySQL5.5存储过程: #插入一条 涂聚文 DELIMITER $$ DROP PROCEDURE IF EXISTS `geovindu`.`proc_Insert_BookKindList` ...
- python中类变量和实例变量
1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Generally speaking, instance variables are for data u ...
- HTML5 Canvas中绘制椭圆的几种方法
1.canvas自带的绘制椭圆的方法 ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)是后来 ...
- <Android Framework 之路> N版本 Framework Camera的一些改动
前言 Android N版本最近发布,Nougat是否好吃,不得而知,慢慢看下~ 感谢AndroidXref这个网站,给开发者提供了大量的便捷~以后学习Android就靠它了. N版本上Framewo ...