最高的奖励
2017-07-25 10:03
92 查看
有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励。在结束时间之前完成该任务,就可以获得对应的奖励。完成每一个任务所需的时间都是1个单位时间。有时候完成所有任务是不可能的,因为时间上可能会有冲突,这需要你来取舍。求能够获得的最高奖励。
Input
第1行:一个数N,表示任务的数量(2 <= N <= 50000)
第2 - N + 1行,每行2个数,中间用空格分隔,表示任务的最晚结束时间Ei以及对应的奖励Wi。(1 <= Ei <= 10^9,1 <= Wi
<= 10^9)
Output
输出能够获得的最高奖励。
Sample Input
7 4 20 2 60 4 70 3 40 1 30 4 50 6 10
Sample Output
230
#include<stdio.h> #include<queue> #include<algorithm> using namespace std; typedef long long ll; typedef struct node { int pos,wealth; friend bool operator <(node a,node b) { return a.wealth>b.wealth; } }Node; Node misson[50010]; int cmp(Node a,Node b) { if(a.pos<b.pos) return 1; else if(a.pos==b.pos) { if(a.wealth<b.wealth) return 1; else return 0; } else return 0; } int main() { priority_queue<Node> pq; int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d %d",&misson[i].pos,&misson[i].wealth); } sort(misson,misson+n,cmp); Node temp=misson[0]; pq.push(temp); for(int i=1;i<n;i++) { if(pq.size()<misson[i].pos) pq.push(misson[i]); else if(pq.size()==misson[i].pos) { temp=pq.top(); if(misson[i].wealth>temp.wealth) { pq.pop(); pq.push(misson[i]); } } } ll ans=0; while(pq.size()) { temp=pq.top(); ans+=temp.wealth; pq.pop(); } printf("%I64d\n",ans); //不知道为什么Long long 类型写成这样的话,编译器就没有warnning return 0; }
相关文章推荐
- 51nod-【1163 最高的奖励】
- 51nod dai1163 最高的奖励
- 51nod 1163 最高的奖励【贪心+优先队列】
- 51NOD 1163 最高的奖励
- 51nod 1163 最高的奖励(贪心+堆)
- 51nod 1164 最高的奖励 V2
- 51nod 1163 最高的奖励
- 51Nod 1163 最高的奖励 并查集&贪心
- 51Nod-1163-最高的奖励
- 最高的奖励 51Nod - 1163
- 51Nod - 116 最高的奖励 ——贪心——优先队列
- 51nod 1163 最高的奖励(贪心)
- 51nod1163 最高的奖励
- 最高的奖励 【贪心】
- 51nod 1163 最高的奖励 (贪心+STL)
- 玩转安家派关注“惠安家”抽奖活动最高送1万元现金奖励!
- 51nod 1163 最高的奖励
- 51nod 1163 最高奖励 已AC 刷题过程记录
- 最高的奖励
- 北京规定6类高级人才来京最高奖励30万元