1123 最高的獎勵

2021-07-10 16:59:30 字數 1395 閱讀 8924

題目描述

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

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

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

樣例輸入

74 20

2 60

4 70

3 40

1 30

4 50

6 10

樣例輸出

230搞了好久,寢室的都以為我神經了。。。

大致的做法是先按時間從小到大排序,時間相同的再按獎勵大小從小到大排序,用乙個sort()函式就可以排好序,然後開兩個陣列,第乙個陣列填排好序的,把第乙個陣列的第乙個賦值給第二個陣列中的第乙個位置,然後遍歷第乙個陣列,陣列一中每乙個中的時間比第二個陣列的個數大,那麼就加進第二個陣列中,如果小,那麼就找出第二個陣列中獎勵最小的那個,替換掉。

#include "iostream"

#include #define n 50005

using namespace std;

struct high

;//這裡進行排序

bool compare(const high &left, const high &right)

else if ((left.time == right.time) && (left.value < right.value))

return false;

}high award[n], awward_1[n];

int main()

sort(award + 1, award + num + 1, compare);

long timr = 1;

awward_1[1] = award[1];

sum += awward_1[1].value;//把第乙個陣列中的第乙個賦值給第二個陣列的第乙個

for (int i = 2; i <= num; i++)

else if (award[i].time <= timr)

}sum -= awward_1[flag].value;

awward_1[flag] = award[i];

sum += award[i].value;

}} cout << sum << endl;

getchar();

getchar();

return 0;

}

最高的獎勵

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

最高的獎勵

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

最高的獎勵

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