链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1163
基准时间限制: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

刚刚了解了一下优先队列,在这题上就用上了,一开始我也不会,看了博客... ,我们先用结构体排序,从结束时间小的
到结束时间大的,如果时间相同,就把奖励搞的在前面。
然后我们就可以以时间1为起点,end=1(所有活动的终止时间肯定>=1),把i=0的活动压入优先队列
然后从i=1循环,如果当前活动的结束时间大于end,那么end++,表示end+1这个时间做当前活动,并且把当前活动
压入队列,如果当前活动时间==end,
那么我们就要在在当前活动和队列顶的活动之间选择一个奖励更高的,如果当前比较的活动奖励高,就把队列顶的
元素pop掉,把当前活动压入,否则继续循环...
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
#define ll long long
ll n,m,k,t;
struct node{
ll time,value;
}str[];
bool cmp(node s1,node s2)
{
if(s1.time!=s2.time)
return s1.time<s2.time;
else
return s1.value>s2.value;
}
priority_queue<ll,vector<ll>,greater<ll> >q;
int main()
{
scanf("%lld",&n);
for(int i=;i<n;i++)
scanf("%lld%lld",&str[i].time,&str[i].value);
sort(str,str+n,cmp);
while(!q.empty())
q.pop();
q.push(str[].value);
ll end=;
for(int i=;i<n;i++)
{
if(str[i].time>end)
{
q.push(str[i].value);
end++;
}
else if(str[i].time==end)
{
if(str[i].value>q.top())
{
q.pop();
q.push(str[i].value);
}
}
}
long long ans=;
while(!q.empty())
{
ans+=q.top();
q.pop();
}
printf("%lld\n",ans);
return ;
}

最新文章

  1. 记录android显示流程
  2. 《TCP/IP 详解 卷一》读书笔记-----Ping&amp;Traceroute
  3. KMP笔记√//找最大子串,前缀自匹配长度
  4. uva 103 Stacking Boxes(DAG)
  5. C++ STD inner_product函数
  6. Jenkins安装与配置
  7. Python之CVXOPT模块
  8. IIS短文件漏洞(搬运整理)
  9. Hadoop InputFormat 输入文件分片
  10. C#.NET开源项目、机器学习、Power BI
  11. Windows10 + Visual Studio 2017环境为C++工程安装使用ZMQ
  12. 浅谈 cosos2d-x 的ImageView和Sprite的区别
  13. a标签使用href=”javascript:void(0); 在火狐浏览器跟chrome 不兼容
  14. UML和模式应用4:初始阶段(4)--需求制品之用例模型模板示例
  15. 目录_JVM专题
  16. Spring的JdbcTemplate与其事务
  17. 【转】Android自定义控件(二)——有弹性的ScrollView
  18. matlab练习程序(模糊集图像增强)
  19. TP5.0:新建控制器
  20. 『嗨威说』常见的C++函数模板整理(一)

热门文章

  1. 基于canvas的电子始终
  2. Android内存泄漏原因
  3. 配置阿里云的金融云上的rsync
  4. 机器学习进阶-图像特征harris-角点检测 1.cv2.cornerHarris(进行角点检测)
  5. Django基础介绍
  6. 页面中的checkbox多选值获取
  7. 建立一个php 基础类
  8. MySQL性能分析(转)
  9. csredis base usage
  10. kvm配置USB直通