最高的奖励

思路:

  排序;

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

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

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

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

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

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

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

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

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

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

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

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

来,上代码:

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 50005 struct NodeType {
int ti,ci;
};
struct NodeType ai[maxn]; int n; long long ans; priority_queue<int>que; inline void in(int &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'') Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
} inline bool cmp(NodeType iposa,NodeType iposb)
{
if(iposa.ti==iposb.ti) return iposa.ci>iposb.ci;
else return iposa.ti<iposb.ti;
} int main()
{
in(n);int cnt=;
for(int i=;i<=n;i++) in(ai[i].ti),in(ai[i].ci);
sort(ai+,ai+n+,cmp);
for(int i=;i<=n;i++)
{
if(cnt<ai[i].ti) cnt++,ans+=ai[i].ci,que.push(-ai[i].ci);
else
{
int op=-que.top();
if(ai[i].ci>op)
{
ans-=op,que.pop(),ans+=ai[i].ci;
que.push(-ai[i].ci);
}
}
}
cout<<ans;
return ;
}

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. Android 获取当前应用的版本号+版本号比较

       前言:因为项目更新的时候需要一些版本号的信息,后台返回两个string,一个是最低兼容版,一个是最新版.所以拿到数据后要比较一下,所以封装了一个Common包来处理. Step 1 废话不多说, ...

  2. python基础——18(面向对象2+异常处理)

    一.组合 自定义类的对象作为另一个类的属性. class Teacher: def __init__(self,name,age): self.name = name self.age = age t ...

  3. OpenCV学习笔记(一) 环境配置

    Visual Studio 2010 VS2010对应的OpenCV的lib文件(build\x86\vc10\lib)分为debug模式和release模式两种:debug模式牺牲速度,但能提供更多 ...

  4. BZOJ 4393: [Usaco2015 Dec]Fruit Feast

    DP #include<cstdio> using namespace std; int T,A,B,F[5000005],G[5000005]; int main(){ scanf(&q ...

  5. HDU 3848 CC On The Tree 树形DP

    题意: 给出一棵边带权的树,求距离最近的一对叶子. 分析: 通过DFS计算出\(min(u)\):以\(u\)为根的子树中最近叶子到\(u\)的距离. 然后维护一个前面子树\(v_i\)中叶子到\(u ...

  6. 获取获取docker的文件

    1.docke实例内mysql 导出文件 mysql -h yourhost -P yourport -u user -p dbname -e "select * from employee ...

  7. WTForm

    Flask-WTForm: from flask import Flask,render_template,request,redirect from wtforms.fields import co ...

  8. loj2055 「TJOI / HEOI2016」排序

    ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...

  9. 菜鸟之路——Linux基础::计算机网络基础,Linux常用系统命令,Linux用户与组权限

    最近又重新安排了一下我的计划.准备跟着老男孩的教程继续学习,感觉这一套教程讲的很全面,很详细.比我上一套机器学习好的多了. 他的第一阶段是Python基础,第二阶段是高等数学基础,主要将机器学习和深度 ...

  10. 详解 MySQL 的计划任务

    注意:5.1以后才支持! 让MYSQL定期执行指定的一条命令.功能类似于crontab. 1. 检查你的MYSQL是否开了这个功能 SHOW VARIABLES LIKE 'event_schedul ...