JSOI2007 建築搶修

2022-05-09 15:05:45 字數 1142 閱讀 3379

嘟嘟嘟

首先我們按自毀時間排序。然後這樣從1到n遍歷,嘗試修復當前第 i 個建築:如果當前修復建築所用的時間加上修復第 i 號建築的時間在自毀前能完成,我們當然要修復它;如果不能完成,那麼我們當然要從當前選的ans個建築以及第i個建築中修復時間最長的那個把他扔掉,這麼做是為了節省時間,好有更大的機會修復後面的建築。至於如何選取最大值,用優先佇列解決。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11

using

namespace

std;

12#define enter puts("")

13#define space putchar(' ')

14#define mem(a) memset(a, 0, sizeof(a))

15 typedef long

long

ll;16 typedef double

db;17

const

int inf = 0x3f3f3f3f;18

const db eps = 1e-8;19

const

int maxn = 1.5e5 + 5;20

inline ll read()

2125

while(isdigit(ch))

26if(last == '

-') ans = -ans;

27return

ans;28}

29 inline void

write(ll x)

3035

36int

n;37

struct

node

3844

}a[maxn];

4546 priority_queueq;

47ll t;

48int

ans;

4950

intmain()

5164}65

else

6671}72

write(ans);

73return0;

74 }

view code

JSOI2007 建築搶修

提交傳送門 這個就是乙個貪心唄,用set維護大到小的數列 然後如果能搶修乙個建築的話就ans 不能的話,看看比不比上一次搶修的優秀,優秀的話就選它,然後更換 description 小剛在玩jsoi提供的乙個稱之為 建築搶修 的電腦遊戲 經過了一場激烈的戰鬥,t部落消滅了所有z部落的入侵者。但是t部...

JSOI2007 建築搶修

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

JSOI2007 建築搶修

開始以為是按照修建時間短的排序,先把修建時間短的修了。但是這樣顯然有問題,因為可能前面的倒塌時間靠後,你先修了,後面塌的就不能修了。所以要按倒塌時間排序開始修。然後如果當前的建築物來得及修,當然是要修的。這時候我們維護乙個已經修過的建築物的大根堆 優先佇列 如果不能修,看看是否從原先修建過的建築物中...