優先佇列 51nod1163最高的獎勵

2022-05-12 03:43:58 字數 1048 閱讀 5389

1163 最高的獎勵

基準時間限制:1 秒 空間限制:131072 kb 分值: 20 

有n個任務,每個任務有乙個最晚結束時間以及乙個對應的獎勵。在結束時間之前完成該任務,就可以獲得對應的獎勵。完成每乙個任務所需的時間都是1個單位時間。有時候完成所有任務是不可能的,因為時間上可能會有衝突,這需要你來取捨。求能夠獲得的最高獎勵。

input

第1行:乙個數n,表示任務的數量(2 <= n <= 50000)

第2 - n + 1行,每行2個數,中間用空格分隔,表示任務的最晚結束時間e[i]以及對應的獎勵w[i]。(1 <= e[i] <= 10^9,1 <= w[i] <= 10^9)

output

輸出能夠獲得的最高獎勵。
input示例

7

4 20

2 60

4 70

3 40

1 30

4 50

6 10

output示例

230

把任務按時間排序,能完成的就完成,不能同時完成的選擇其中的價值大者,用優先佇列實現

**如下:

#include

#include

#include

#include

#include

using namespace std;

typedef long long ll;

int inn()  讀入優化

while(a>='0'&&a<='9')

return ans*ok;

} struct no

}nu[50010];

bool com(no a,no b)  按時間小排序,時間相同則按價值大排序

int main()

while(!q.empty())

ans+=q.top().m,q.pop();  計算

printf("%lld\n",ans);

return 0;

}

51nod 1163 貪心 優先佇列

基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 有n個任務,每個任務有乙個最晚結束時間以及乙個對應的獎勵。在結束時間之前完成該任務,就可以獲得對應的獎勵。完成每乙個任務所需的時間都是1個單位時間。有時候完成所有任務是不可能的,因為時間上可能會有衝突,這需要你來取捨...

51Nod 1163 最高的獎勵

acm模版 這是一道十分不錯的貪心問題,有o nlogn 和o n n 解法。oneo nlogn 演算法 將最晚結束時間公升序排序,第n個任務最晚時間如果大於已經消耗的時間,則可以算入總和,若不大於可以嘗試替換掉已經算入總和中的最小獎勵的任務,條件是這件任務的獎勵要大於要替換掉的任務的獎勵。使用優...

51NOD 1163 最高的獎勵

這個題 自己想了想 mmp 感覺一做貪心題只會用 sort 忽略了 優先佇列 這題搜了題解後 大概明白了 就是建立乙個最小堆 把cost 壓入最小堆 如果當前時間 q.size 說明可以直接加 如果小於等於 就要把cost 壓入後 取乙個最小的出來 挺好的乙個題 include using name...