最高的奖励

思路:

  排序;

  时间为第一关键字,按总小到大排;

  价值为第二关键字,按从大到小排;

  然后,不难看出,如果两个时间不同;

  那么,两个时间之间最少能做一件事;

  因为他们的时间下限最少相差1;

  然后我们记录每个时间要做的事;

  如果同一时间要做很多事,则选择其中最大的一个;

  看似正确的题解,其实很不对。。。

  我们需要用一个堆来记录已经做了的事的最小值;

  如果遇到一个因为时间限制不能做的事,则判断当前的事的价值是否大于堆顶;

  如果大于,则ans+=当前事的价值-堆顶,然后堆顶出队,当前事的价值入队;

  如果还是不懂看代码吧。。。

来,上代码:

  1. #include <queue>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <iostream>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8.  
  9. #define maxn 50005
  10.  
  11. struct NodeType {
  12. int ti,ci;
  13. };
  14. struct NodeType ai[maxn];
  15.  
  16. int n;
  17.  
  18. long long ans;
  19.  
  20. priority_queue<int>que;
  21.  
  22. inline void in(int &now)
  23. {
  24. char Cget=getchar();now=;
  25. while(Cget>''||Cget<'') Cget=getchar();
  26. while(Cget>=''&&Cget<='')
  27. {
  28. now=now*+Cget-'';
  29. Cget=getchar();
  30. }
  31. }
  32.  
  33. inline bool cmp(NodeType iposa,NodeType iposb)
  34. {
  35. if(iposa.ti==iposb.ti) return iposa.ci>iposb.ci;
  36. else return iposa.ti<iposb.ti;
  37. }
  38.  
  39. int main()
  40. {
  41. in(n);int cnt=;
  42. for(int i=;i<=n;i++) in(ai[i].ti),in(ai[i].ci);
  43. sort(ai+,ai+n+,cmp);
  44. for(int i=;i<=n;i++)
  45. {
  46. if(cnt<ai[i].ti) cnt++,ans+=ai[i].ci,que.push(-ai[i].ci);
  47. else
  48. {
  49. int op=-que.top();
  50. if(ai[i].ci>op)
  51. {
  52. ans-=op,que.pop(),ans+=ai[i].ci;
  53. que.push(-ai[i].ci);
  54. }
  55. }
  56. }
  57. cout<<ans;
  58. return ;
  59. }

AC日记——最高奖励 51nod 1163的更多相关文章

  1. AC日记——玻璃切割 51nod 1562

    玻璃切割 思路: 并查集: 离线操作: 先把每次切割都存下来: 然后从后面不断合并切割: 然后每次更新最大长和宽: 记录答案: 要开longlong: 来,上代码 #include <cstdi ...

  2. AC日记——幸运号码 51nod 1043

    幸运号码 思路: 传说中的数位dp: 不难发现,n(n<1000) ,那么,n个数的最大和为9*1000=9000: 对于9000*1000的时间范围,我们可以用dp来解决: dp[i][j], ...

  3. AC日记——石子归并 51nod 1021

    石子归并 思路: 经典动态规划——归并类问题: 我们把状态划为n个,即1-n的n个长度为n个状态: 那么,每个长度为i的状态都可以由i-1个长度为i-1的状态推出: 所以,dp转移方程: dp[i][ ...

  4. AC日记——背包问题 V2 51nod 1086

    有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi ...

  5. 51nod 1163 最高的奖励(贪心+优先队列)

    题目链接:51nod 1163 最高的奖励 看着这题我立马就想到昨天也做了一道贪心加优先队列的题了奥. 按任务最晚结束时间从小到大排序,依次选择任务,如果该任务最晚结束时间比当前时间点晚,则将该任务的 ...

  6. AC日记——codevs1688求逆序对

    AC日记--codevs1688求逆序对 锵炬 掭约芴巷 枷锤霍蚣 蟠道初盛 到被他尽情地踩在脚下蹂躏心中就无比的兴奋他是怎么都 ㄥ|囿楣 定要将他剁成肉泥.挫骨扬灰跟随着戴爷这么多年刁梅生 圃鳋 ...

  7. 51nod 1163 最高的奖励

    链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1163 1163 最高的奖励  基准时间限制:1 秒 空间限制:13 ...

  8. 51nod 1163:最高的奖励 优先队列

    1163 最高的奖励 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该 ...

  9. AC日记——最小正子段和 51nod 1065

    最小正子段和 思路: 找最小的大于0的sum[j]-sum[i](j>i): 高级数据结构(splay)水过: 来,上代码: #include <cstdio> #include & ...

随机推荐

  1. django_数据库操作—增、删、改、查

    增加 增加数据有两种方法 1> sava >>> from datetime import date >>> book = BookInfo( btitle= ...

  2. mysql同步故障解决

    故障现象:Slave_SQL_Running: No Slave状态:mysql> show slave status\GSlave_IO_Running: YesSlave_SQL_Runni ...

  3. [BZOJ1588]营业额统计(Splay)

    Description 题意:给定 n个数,每给定一个数,在之前的数里找一个与当前数相差最小的数,求相差之和(第一个数为它本身) 如:5 1 2 5 4 6 Ans=5+|1-5|+|2-1|+|5- ...

  4. Http状态码(了解)

    一些常见的http状态码 200 - OK,服务器成功返回网页     - Standard response for successful HTTP requests. 301 - Moved Pe ...

  5. readhat7.0 bond配置

    Bonding的模式一共有7种: 1.mode=0(balance-rr)(平衡抡循环策略) 概念:链路负载均衡,增加带宽,支持容错,一条链路故障会自动切换正常链路.交换机需要配置聚合口,思科叫por ...

  6. Spring---浅谈AOP

    概念 AOP是Aspect Oriented Programming的缩写,即面向切面的编程.是一种比较新颖的编程思想,也是Spring框架中一个重要的领域. AOP将应用系统分为两个部分:核心业务逻 ...

  7. Python框架之Django学习笔记(十六)

    Django框架之表单(续) 今天简直无力吐槽了,去了香山,结果和网上看到的简直是天壤之别啊,说好的香山的枫树呢?说好的香山的红叶呢?说好的漫山遍野一片红呢?本以为在山上,一口气爬上去,沿路基本都是翠 ...

  8. Github问题An error occurred trying to download

    Github for windows安装过程出现了这样的问题An error occurred trying to download 'http://github-windows.s3.amazona ...

  9. 《HTTP协议详解》读书笔记---请求篇之消息报头

    不管是请求消息还是响应消息都包含消息报头,那么消息报头包含哪些内容?他们都代表什么含义呢?以下将带着 这些问题去学习消息报头. http消息(不管是请求消息还是响应消息)都是由开始行,消息报头(可选) ...

  10. [转载]用等高线图(Contour maps)可视化多变量函数

    https://blog.csdn.net/xlinsist/article/details/50920479 Overview 由于我们用手来画三维图像很困难,我们可以用等高线图来描述图像会更加简单 ...