基准时间限制: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
参考博客:http://blog.csdn.net/acdreamers/article/details/38946315
<span style="font-size:18px;">#include<iostream> #include<stdio.h> #include<algorithm> #include<queue> using namespace std; struct node { int E; int W; friend bool operator<(node a,node b) { return a.W>b.W; } }; bool cmp(node a,node b) { return a.E<b.E;//升序 } int main() { int T,i; node a[50001]; cin>>T; for(i=0;i<T;i++) cin>>a[i].E>>a[i].W; sort(a,a+T,cmp); priority_queue<node>Q; for(i=0;i<T;i++) { if(Q.size()<a[i].E) Q.push(a[i]); else { if(a[i].W>Q.top().W) { Q.pop(); Q.push(a[i]); } } } __int64 ans=0; while(!Q.empty()) { ans+=Q.top().W; Q.pop(); } printf("%I64d\n",ans); return 0; }</span>
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-12 06:57:29