51nod 1163 最高的奖励


- 第1行:一个数N,表示任务的数量(2 <= N <= 50000)
- 第2 - N + 1行,每行2个数,中间用空格分隔,表示任务的最晚结束时间E[i]以及对应的奖励W[i]。(1 <= E[i] <= 10^9,1 <= W[i] <= 10^9)
- 输出能够获得的最高奖励。
- 7
- 4 20
- 2 60
- 4 70
- 3 40
- 1 30
- 4 50
- 6 10
- 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 ;
- }
51nod 1163 最高的奖励的更多相关文章
- 51nod 1163 最高的奖励(贪心+优先队列)
题目链接:51nod 1163 最高的奖励 看着这题我立马就想到昨天也做了一道贪心加优先队列的题了奥. 按任务最晚结束时间从小到大排序,依次选择任务,如果该任务最晚结束时间比当前时间点晚,则将该任务的 ...
- 51nod 1163:最高的奖励 优先队列
1163 最高的奖励 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该 ...
- 51nod 1163 贪心
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1163 1163 最高的奖励 基准时间限制:1 秒 空间限制:131072 ...
- 51 Nod 1163 最高的奖励
1163 最高的奖励 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成 ...
- AC日记——最高奖励 51nod 1163
最高的奖励 思路: 排序: 时间为第一关键字,按总小到大排: 价值为第二关键字,按从大到小排: 然后,不难看出,如果两个时间不同: 那么,两个时间之间最少能做一件事: 因为他们的时间下限最少相差1: ...
- 51nod 1163贪心
用优先队列来贪心,是一个很好地想法.优先队列在很多时候可以维护最值,同时可以考虑到一些其他情况. http://www.51nod.com/onlineJudge/questionCode.html# ...
- 51nod - 1163 巧妙的并查集 O(1)维护区间
有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该任务,就可以获得对应的奖励.完成每一个任务所需的时间都是1个单位时间.有时候完成所有任务是不可能的,因为时间上可能会有冲突 ...
- 水题:51Nod 1163-最高的奖励
最高的奖励 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 Description 有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该任 ...
- 【51nod】1164 最高的奖励 V2
题解 一道比较神奇的二分图匹配 既然有n个元素,那么能匹配n个位置,我们把这n个位置找出来,是每个区间从左端点开始找到一个没有被匹配到的位置作为该点(我们忽略右端点) 然后我们从价值大到小,然后从左端 ...
随机推荐
- maven项目里的mapper不被加载,解析
出现这个错误是因为maven加载配置文件是从resource里加载的,所以要配置一下
- Mysql 索引 n-gram分词引擎使用
概述: 类似于书籍的目录,找到一本书的特定内容,需要首先找到内容对应页码,定位对应页码 存储引擎使用类似方法进行数据查找,先找到索引中对应值,然后根据匹配的索引找到对应行 实现原理: 索引的实现通常使 ...
- C++Builder debug 程序的时候 structure required
C++Builder debug 程序的时候, deub一个变量 dm->avar; E2288 Pointer to structure required on left side of -& ...
- mui init 出现无法引入子页面问题
1. 检查项目中是否重复出现了 mui.init() 函数; mui.init({ subpages: [{ styles: { // top: "44px", top: &quo ...
- ISPF常用命令
[ISPF功能键] PF1: HELP帮助键 PF2: SPLIT键,改变分屏位置 PF3: END键,结束并退回上级菜单 PF4: RETURN键,结束并退回主菜单 PF5: REFIND键,重复最 ...
- Seaweed-FS综合使用测试(转)
2016-03-16 12:17:48 Seaweed-FS综合使用测试 参考信息 https://github.com/chrislusf/seaweedfs/ https://bintray. ...
- 1.13.Mark1
[经济学人]双语阅读:律师事务所 标价更高 收益更少 Business 商业报道 Law firms 律师事务所 Charging more, getting less 标价更高,收益更少 L ...
- 转:用JS获取地址栏参数的方法(超级简单)
转载链接: http://www.cnblogs.com/fishtreeyu/archive/2011/02/27/1966178.html 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实 ...
- React/anu实现弹出层2
这次是使用了一个比较罕见的APIReactDOM.unstable_renderSubtreeIntoContainer,ReactDOM.unstable_renderSubtreeIntoCont ...
- java程序发布成exe等
1.使用工具jartoexe http://www.regexlab.com/zh/jar2exe/free.htm http://www.jar2exe.com/ 2.exe4j.JSmooth等 ...