bzoj1029 JSOI2007 建築搶修

2021-07-27 17:13:02 字數 1166 閱讀 3420

傳送門

貪心顯然。

1.按照最後時限排序,暴力插入。

但是顯然會錯。

10 10

10 20

2 21

2 21

2 21

答案是2,但是顯然最優的是4

於是考慮改進。

2.在無法修理時我們可以放棄花費時間最長的工作。

明顯花費時間最長的工作時間大於當前工作是修改更優。

我們可以用乙個大根堆實現。

然後就通過了。

我才不會告訴你我wa了5次。

var

a,b,c:array [0..200005] of int64;

n,i,ans,top:longint;

tt:int64;

procedure kp(l,r:longint);

var i,j:longint;

m,t:int64;

begin

i:=l; j:=r; m:=b[(l+r) div 2];

while (i<=j) do begin

while (b[i]m) do dec(j);

if (i<=j) then begin

t:=a[i]; a[i]:=a[j]; a[j]:=t;

t:=b[i]; b[i]:=b[j]; b[j]:=t;

inc(i); dec(j);

end; end;

if (l1) and (c[s]>c[s div 2]) do

begin t:=c[s]; c[s]:=c[s div 2]; c[s div 2]:=t; s:=s div 2; end;

end;

procedure del;

var s,p:longint; t:int64;

begin

c[1]:=c[top]; dec(top); s:=1;

while (s*2<=top) do begin

if (s*2+1>top) or (c[s*2]>c[s*2+1]) then p:=s*2 else p:=s*2+1;

if (c[s]0) then begin tt:=tt-c[1]+a[i]; del; ins(a[i]); end;

write(ans);

end.

bzoj1029 JSOI2007 建築搶修

time limit 4 sec memory limit 162 mb submit 4807 solved 2157 submit status discuss 小剛在玩jsoi提供的乙個稱之為 建築搶修 的電腦遊戲 經過了一場激烈的戰鬥,t部落消滅了所有z部落的 入侵者。但是t部落的基地裡已經...

bzoj1029 JSOI2007 建築搶修

description 小剛在玩jsoi提供的乙個稱之為 建築搶修 的電腦遊戲 經過了一場激烈的戰鬥,t部落消滅了所有z部落的 入侵者。但是t部落的基地裡已經有n個建築設施受到了嚴重的損傷,如果不盡快修復的話,這些建築設施將會完全 毀壞。現在的情況是 t部落基地裡只有乙個修理工人,雖然他能瞬間到達任...

BZOJ 1029 JSOI2007 建築搶修

題目鏈結 題意 題解 按照t2公升序排 順序列舉每乙個建築 如果當前建築能夠修理 則修理它 並將它的t1值加入到堆中 然後累加當前所用的時間now 如果加了這個t1之後會大於t2則這個建築沒辦法修理 則在堆裡面去找 看看有沒有比t1大的值 如果有的話,就改修這個建築 而那個建築不修了 這樣雖然不能增...