博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1029 建筑抢修
阅读量:5150 次
发布时间:2019-06-13

本文共 1142 字,大约阅读时间需要 3 分钟。

题目大意:

n个建筑,每个建筑有两个值,一个为修它的时间长度 一个为它的截止日期(若超过该日期则无法修建该建筑)

求最多能修多少个建筑

思路:

首先我们可以把它们按照截止日期排序

然后在正常贪心的基础上 做一个优化

我们把已经修过的建筑的修建时间都放到一个队里

每次如果一个建筑不能修

那么我们考虑一下能否把当前的堆顶换成这个建筑

这样就可以省下来时间

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #define inf 214748361110 #define ll long long11 #define MAXN 150000012 using namespace std;13 inline ll read()14 {15 ll x=0,f=1;char ch=getchar();16 while(!isdigit(ch)) { if(ch=='-') f=-1;ch=getchar();}17 while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}18 return x*f;19 }20 struct data21 {22 int dl,tm;23 bool operator < (const data &a) const24 {25 return dl
q;29 int n,now,ans;30 int main()31 {32 n=read();33 for(int i=1;i<=n;i++) a[i].tm=read(),a[i].dl=read();34 sort(a+1,a+n+1);35 for(int i=1;i<=n;i++)36 {37 if(now+a[i].tm<=a[i].dl)38 {39 now+=a[i].tm;40 ans++;41 q.push(a[i].tm);42 }43 else if(q.top()>a[i].tm)44 {45 now-=q.top(),now+=a[i].tm;46 q.pop();q.push(a[i].tm);47 }48 }49 printf("%d",ans);50 }
View Code

转载于:https://www.cnblogs.com/yyc-jack-0920/p/7774447.html

你可能感兴趣的文章
java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查
查看>>
使用Reporting Services时遇到的小问题
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
js兼容公用方法
查看>>
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Kettle学习系列之Kettle能做什么?(三)
查看>>
【Mac + GitHub】之在另一台Mac电脑上下载GitHub的SSH链接报错
查看>>
Day03:Selenium,BeautifulSoup4
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
一些php文件函数
查看>>