贪心,比较明显了(很像USACO的风格);

按时间限制排序(升序)

顺次处理,如果当前时间能够修复就修复

否则就在之前修复的任务中找一个耗时最多(大于当前任务)的,改成修当前任务;

显然这样最优吧,

毫无疑问要维护大根堆(耗时);

code

var heap,a,w:array[0..150010] of longint;

ans,i,t,j,n,now,x,y:longint;

procedure swap(var a,b:longint);

var c:longint;

begin

c:=a;

a:=b;

b:=c;

end;

procedure sift(i:longint);

var j:longint;

begin

j:=i shl 1;

while j<=t do

begin

if (j+1<=t) and (heap[j]<heap[j+1]) then inc(j);

if heap[i]<heap[j] then

begin

swap(heap[i],heap[j]);

i:=j;

j:=j shl 1;

end

else break;

end;

end;

procedure up(i:longint);

var j:longint;

begin

j:=i shr 1;

while j>0 do

begin

if heap[i]>heap[j] then

begin

swap(heap[i],heap[j]);

i:=j;

j:=i shr 1;

end

else break;

end;

end;

procedure sort(l,r: longint);

var i,j,x,y: longint;

begin

i:=l;

j:=r;

x:=a[(l+r) div 2];

repeat

while a[i]<x do inc(i);

while x<a[j] do dec(j);

if not(i>j) then

begin

swap(a[i],a[j]);

swap(w[i],w[j]);

inc(i);

dec(j);

end;

until i>j;

if l<j then sort(l,j);

if i<r then sort(i,r);

end;

begin

readln(t);

for i:=1 to t do

begin

readln(x,y);

if y>=x then

begin

inc(n);

w[n]:=x;

a[n]:=y;

end;

end;

sort(1,n);

now:=0;

t:=0;

for i:=1 to n do

if now+w[i]<=a[i] then

begin

inc(ans);

now:=now+w[i];

inc(t);

heap[t]:=w[i];

up(t);

end

else if w[i]<heap[1] then

begin

now:=now-heap[1]+w[i];

heap[1]:=w[i];

sift(1);

end;

writeln(ans);

end.

今天解题报告就补到这里吧(好多bzoj题目都没写报告)

bzoj1029的更多相关文章

  1. 【bzoj1029】道路抢修

    [bzoj1029]建筑抢修 传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1029 分析 http://blog.csdn.net/popo ...

  2. BZOJ1029: [JSOI2007]建筑抢修(贪心)

    题目链接:BZOJ1029: [JSOI2007]建筑抢修 题解:贪心思想,按结束时间从小到大排序,选花费时间尽量短的建筑维修,用堆维护. #include<stdio.h> #inclu ...

  3. 【BZOJ1029】建筑抢修(贪心)

    [BZOJ1029]建筑抢修(贪心) 题面 BZOJ 洛谷 题解 感觉自己已经不会贪心了. 很明显的一个想法是按照终止时间排序,然后能选则选. 但是这样子可能会因为前面选择了一个修理时间很长的,导致现 ...

  4. 【bzoj1029】【JSOI2007】建筑抢修

    1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 6417  Solved: 2883[Submit][Statu ...

  5. 【JSOI2007】【Bzoj1029】建筑抢修

    贪心... 按照T2来进行排序,用堆来进行维护.循环一遍,如果循环时间加上已用时间不超过截止时间,那就ANS++.否则,将它与堆顶判断,如果小于堆顶就把堆顶踢出,把它加入. #include<c ...

  6. BZOJ1029: [JSOI2007]建筑抢修[模拟 贪心 优先队列]

    1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 3785  Solved: 1747[Submit][Statu ...

  7. bzoj1029 [JSOI2007]建筑抢修

    贪心,按截止时间排序,然后按截止时间从小到大枚举维修的建筑,如果之前修理建筑的总时间+当前修理时间<=截止时间,那么答案+1,否则如果之前修理过的建筑中最大的修理时间>当前建筑修理时间,那 ...

  8. BZOJ1029 建筑抢修

    Description 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重 ...

  9. BZOJ1029:[JSOI2007]建筑抢修(贪心,堆)

    Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的 入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快 ...

随机推荐

  1. angularjs--$watch、$watchGroup、$watchCollection含义

    angularjs的$watch.$watchGroup.$watchCollection使用方式   如果想在controller里面随时监听一个值的变化那就用$watch <p>    ...

  2. 【Delphi】无标题移动窗体

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Inte ...

  3. 关于B/S系统在移动端应用的一些注意的地方(不断更新)

    1.不要直接把PC端的页面直接搬到移动端来用.这里举个例子:有个活动页面,在PC端和手机端的Safari里展现都好,但是当用手机APP(如手机淘宝)扫码打开后,却没法顺畅的异步获取到jsonp的信息. ...

  4. Spark Streaming揭秘 Day16 数据清理机制

    Spark Streaming揭秘 Day16 数据清理机制 今天主要来讲下Spark的数据清理机制,我们都知道,Spark是运行在jvm上的,虽然jvm本身就有对象的自动回收工作,但是,如果自己不进 ...

  5. Nagios脚本编写事例

    目标:编写一个简单的nagios脚本,实现监控client上的nginx进程是否启动,假如没启动的话发出报警. 首先在master上对nagios的配置文件进行设置,修改services.cfg文件, ...

  6. 在iframe结构中,如何使弹出层位于所有框架的上方(-)

    在做后台管理页面的时候,经常用到iframe.虽说这东西有些过时,也不利于SEO,但是后台就是后台,不需要考虑那么多东西,综合来说,用iframe还是很适合后台管理界面的. 但是在遇到弹出层时,出现了 ...

  7. WCF 傻瓜教程

    第一步,新建WCF服务应用程序 第二步,定义接口: 修改接口类,定义你要的方法接口默认文件名:IService1.cs 第三步,实现接口: 在svc文件里实现接口方法,默认文件名:Service1.s ...

  8. gridview 一个列勾选框选中,同时选中同一行的另一列勾选框

    <asp:TemplateColumn > <HeaderTemplate> 是否显示 <asp:CheckBox ID="chk_Show" sty ...

  9. POJ 2411 压缩状态DP

    这个题目非常赞! 给定一个矩形,要求用1*2 的格子进行覆盖,有多少种覆盖方法呢? dp[i][j] 当状态为j,且第i行已经完全铺满的情况下的种类数有多少种?j中1表示占了,0表示没有被占. 很显然 ...

  10. vijos 1085 Sunnypig闯三角关

    {这个题5个正确,五个超时,不要盲目相信我的代码,谁有更好的算法或者优化请留言,(*^__^*) 嘻嘻……} 背景 贪玩的sunnypig请Charles为他打造一个奇幻世界,Charles欣然答应了 ...