51nod 1163 最高的奖励
2017-07-31 21:49
232 查看
先建一个优先队列,小根堆,然后按照任务的时间升序排序,然后从头开始扫,如果当前的时间没有超过任务的最晚结束时间,就把任务扔到优先队列里,然后继续扫,当扫到某个任务,发现他的最晚结束时间已经过去了,就从优先队列里出来一个最小的,他俩比较,如果当前的任务获得的奖励更高,就把队列里的那个之前的任务替换掉。这样扫完,队列里的任务就是获得奖励最高的任务了。然后加和就好了。
#include <bits/stdc++.h> using namespace std; const int MAXN = 50010; pair<int,int> task[MAXN]; priority_queue<int,vector<int>,greater<int>> que; int n; int main() { ios::sync_with_stdio(false); cin >> n; for(int i = 0; i < n; ++i) cin >> task[i].first >> task[i].second; sort(task,task+n); for(int i = 0; i < n; ++i) { if(que.size() < task[i].first) que.push(task[i].second); else if(task[i].second > que.top()) { que.pop(); que.push(task[i].second); } } long long res = 0; while(!que.empty()) { res += que.top(); que.pop(); } cout << res <<endl; }
相关文章推荐
- 51nod 1163 最高的奖励
- 51nod 1163 最高的奖励 (贪心+优先队列/并查集)&& 1191 消灭兔子(贪心+优先队列维护) && 1475 建设国家 (思维枚举+优先队列)
- 51nod 1163:最高的奖励 优先队列
- 51nod 1163 最高的奖励【贪心】
- 水题:51Nod 1163-最高的奖励
- 51Nod 1163 最高的奖励(贪心+优先队列/并查集合)
- 51NOD 1163 最高的奖励
- 51nod 1163 最高的 d3da 奖励(超级经典贪心)
- 最高的奖励 51Nod - 1163
- 51Nod - 1163 最高的奖励 (优先队列)
- 51nod-1163 最高的奖励(贪心)
- 51nod 1163 最高的奖励 【贪心 ,并查集】
- 51Nod 1163 最高的奖励
- 51NOD 1163——最高的奖励(可用优先队列解决的贪心问题)
- 51nod 1163 最高的奖励(贪心)
- 51nod 1163 最高的奖励 (贪心/贪心+优先队列)
- 51nod 1163 最高的奖励(贪心+堆)
- 51nod 1163 最高的奖励(贪心)
- 51nod 1163 最高的奖励 [贪心]【杂类】
- 51nod 1163 最高奖励 已AC 刷题过程记录