c 自帶堆 劍與魔法 dragons

2021-10-09 14:11:57 字數 1550 閱讀 9552

(這個題目看上去沒複製完的樣子)

還有c++自帶的堆…

……真香,nb!

萬老師聽說某大國很流行穿越,於是他就想寫乙個關於穿越的劇本。

閒話休提。話說老師穿越到了某乙個劍與魔法的大陸。因為如此這般,所以老師從維娜艾那裡得到了預言。老師一共被告知了若干件按順序結算的事件。這些事件分為兩類:戰役事件(case)、穿越回去事件(end)。戰役事件可以選擇是否參加,參加了之後會獲得一定的金錢。每個end事件發生需要至少參加一定數量的戰役事件。特別的是,end事件如果滿足要求就會強制發生。老師希望在大陸玩個夠,所以他要求只有最後乙個end事件會發生。老師希望獲得最多的金錢,所以求助於你。

輸入第一行乙個數n,表示輸入檔案有多少行。

接下來每一行用空格隔開乙個字元和乙個整數。字元為「c」表示戰役事件,接下來的整數表示這次漲rp順帶有多少錢;字元為「e」表示穿越回去事件,接下來的整數代表至少要漲多少rp。最後乙個事件保證是end事件。

輸出第一行乙個整數,最多金錢數目。

若不可能則輸出-1。

輸入樣例

5

c 10

c 12

e 2c 1

e 2

輸出樣例
13
說明

30%的資料滿足 n<=20

60%的資料滿足 n<=1,000

100%的資料滿足 n<=200,000

每次漲rp事件賞金不超過10,000

穿越事件的要求不超過200,000

遇到乙個事件c,將能漲的錢數加入小根堆中。

如果超出end的範圍,便彈出直到小於範圍。

這樣就可以利用c++自帶的小根堆完美地解決此題…

即保證取值合法同時又能取到最大值。

關於堆:

#include

//這是乙個小根堆:

priority_queue<

int,vector<

int>

,greater<

int>

> q;

//這是乙個大根堆:

priority_queue<

int,vector<

int>

,less<

int>

>q;

#include

#include

#include

#include

#include

using

namespace std;

priority_queue<

int,vector<

int>

,greater<

int>

> q;

int n,s,ans;

char c,lc;

char

readc()

intreads()

}int

main()

}while

(q.size()

)printf

("%d"

,ans)

;}

劍與魔法 dragons

operatorname ssl比賽1 142萬老師聽說某大國很流行穿越,於是他就想寫乙個關於穿越的劇本。閒話休提。話說老師穿越到了某乙個劍與魔法的大陸。因為如此這般,所以老師從維娜艾那裡得到了預言。老師一共被告知了若干件按順序結算的事件。這些事件分為兩類 戰役事件 case 穿越回去事件 end ...

劍與魔法 dragons 優先佇列

題目描述 萬老師聽說某大國很流行穿越,於是他就想寫乙個關於穿越的劇本。閒話休提。話說老師穿越到了某乙個劍與魔法的大陸。因為如此這般,所以老師從維娜艾那裡得到了預言。老師一共被告知了若干件按順序結算的事件。這些事件分為兩類 戰役事件 case 穿越回去事件 end 戰役事件可以選擇是否參加,參加了之後...

JZOJ 3487 劍與魔法 貪心 堆

有nn 條指令。每個指令有以下兩種格式。在忽略最後乙個e e指令的前提下求最大價值。居然是貪心。對於每乙個e e指令,我們不能執行超過xx個c c指令,那麼很明顯,肯定是要盡量多執行c c指令並且執行價值較大的指令。那麼就將讀入到的指令放入乙個小根堆裡,每次當執行的c c指令超過x x條時,就刪除小...