注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

时光机TimeMachine

——一个退役OIer

 
 
 

日志

 
 

[BZOJ1029][JSOI2007]建筑抢修  

2014-10-14 14:43:56|  分类: Problems |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1029: [JSOI2007]建筑抢修

题解在代码下方

#include<cstdio>
#include<cstdlib>
#include<queue>
#include<algorithm>
using namespace std;
const int N = 150000+10;
const int MAX = 2E9;
int n,m,f[N];
struct Data{
int s,l;
Data(){}
Data(int start,int len):s(start),l(len){}
}data[N];
bool operator < (Data a,Data b){return a.l < b.l;}
bool cmp(Data a,Data b){return a.s < b.s;}
int scan(){int i=0;scanf("%d",&i);return i;}
priority_queue<Data>dui;
int main(){
int i,j,a,b;
n = scan();
for(i=1;i<=n;i++){
a = scan();b = scan();
data[i].s = b;
data[i].l = a;
}
sort(data+1,data+1+n,cmp);
int ans = 0,last=0;
for(i=1;i<=n;i++){
if(last + data[i].l > data[i].s){
Data top = dui.top();
if(data[i] < top){
last -= top.l;
last += data[i].l;
dui.pop();
dui.push(data[i]);
}
}else{
dui.push(data[i]);
last += data[i].l;
ans++;
}
}
printf("%d\n",ans);
return 0;
}

题解:
贪心
按照t2排序,考虑已经前面选修的建筑,如果已用时间再修自己会超过限制,就挑出用时最长的那个替换掉。
------------------------------------------------------------------------------------------
我一开始一直考虑的是按照t2-t1排序,然后死也没想出来……

  评论这张
 
阅读(311)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017