码迷,mamicode.com
首页 > 其他好文 > 详细

最高的奖励

时间:2015-07-18 12:40:17      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

基准时间限制: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>

版权声明:本文为博主原创文章,未经博主允许不得转载。

最高的奖励

标签:

原文地址:http://blog.csdn.net/zuguodexiaoguoabc/article/details/46940439

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!