51nod 1163 貪心 優先佇列

2021-08-08 22:21:39 字數 1187 閱讀 2223

基準時間限制:1 秒 空間限制:131072 kb 分值: 20 難度:3級演算法題

有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貪心+優先佇列。

一開始自己一直想逆向思維,其實我們換種思維,很容易求解。

具體見**o(nlogn)

先對每個任務按截至時間公升序排序

掃這個任務陣列,如果任務的截至時間大於已經消耗的時間,則進入佇列,反正,則表明有重複截至時間的任務,佇列中價值最小的任務出隊,

這個任務的價值入隊。

#include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 5e5+100;

typedef

long

long ll;

struct task

;task task[maxn];

bool cmp(task a,task b)

priority_queue,greater > que;

sort(task,task+n,cmp);

for(int i=0;iif(task[i].e>que.size())

else

}ll ans=0;

while(que.size())

cout

0;}

優先佇列 51nod1163最高的獎勵

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

51nod 1163 最高的獎勵 貪心

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

51Nod 1163 最高的獎勵 貪心

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