AC日记——最高奖励 51nod 1163
思路:
排序;
时间为第一关键字,按总小到大排;
价值为第二关键字,按从大到小排;
然后,不难看出,如果两个时间不同;
那么,两个时间之间最少能做一件事;
因为他们的时间下限最少相差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的更多相关文章
- AC日记——玻璃切割 51nod 1562
		
玻璃切割 思路: 并查集: 离线操作: 先把每次切割都存下来: 然后从后面不断合并切割: 然后每次更新最大长和宽: 记录答案: 要开longlong: 来,上代码 #include <cstdi ...
 - AC日记——幸运号码 51nod 1043
		
幸运号码 思路: 传说中的数位dp: 不难发现,n(n<1000) ,那么,n个数的最大和为9*1000=9000: 对于9000*1000的时间范围,我们可以用dp来解决: dp[i][j], ...
 - AC日记——石子归并 51nod 1021
		
石子归并 思路: 经典动态规划——归并类问题: 我们把状态划为n个,即1-n的n个长度为n个状态: 那么,每个长度为i的状态都可以由i-1个长度为i-1的状态推出: 所以,dp转移方程: dp[i][ ...
 - AC日记——背包问题 V2 51nod 1086
		
有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi ...
 - 51nod 1163 最高的奖励(贪心+优先队列)
		
题目链接:51nod 1163 最高的奖励 看着这题我立马就想到昨天也做了一道贪心加优先队列的题了奥. 按任务最晚结束时间从小到大排序,依次选择任务,如果该任务最晚结束时间比当前时间点晚,则将该任务的 ...
 - AC日记——codevs1688求逆序对
		
AC日记--codevs1688求逆序对 锵炬 掭约芴巷 枷锤霍蚣 蟠道初盛 到被他尽情地踩在脚下蹂躏心中就无比的兴奋他是怎么都 ㄥ|囿楣 定要将他剁成肉泥.挫骨扬灰跟随着戴爷这么多年刁梅生 圃鳋 ...
 - 51nod 1163 最高的奖励
		
链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1163 1163 最高的奖励 基准时间限制:1 秒 空间限制:13 ...
 - 51nod 1163:最高的奖励 优先队列
		
1163 最高的奖励 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该 ...
 - AC日记——最小正子段和 51nod 1065
		
最小正子段和 思路: 找最小的大于0的sum[j]-sum[i](j>i): 高级数据结构(splay)水过: 来,上代码: #include <cstdio> #include & ...
 
随机推荐
- 将Web项目War包部署到Tomcat服务器基本步骤(完整版)
			
1. 常识: 1.1 War包 War包一般是在进行Web开发时,通常是一个网站Project下的所有源码的集合,里面包含前台HTML/CSS/JS的代码,也包含Java的代码. 当开发人员在自己 ...
 - 虚拟机中配置SQL SERVER2008R2远程访问
			
VM虚拟机中配置数据库访问 选择虚拟机设置--硬件--网络适配器,选择桥接模式:直接连接物理网络 不可选用主机模式(与主机共享专用网络) 数据库远程配置,转自:http://jingyan.baidu ...
 - [BZOJ1503]郁闷的出纳员(Splay)
			
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
 - dialog BLE SDK 学习(1)
			
dialog DA14580 SDK版本:5.0.4. 本文介绍了SDK的运行流程,剖析arch_main.c的工作过程. dialog的BLE协议栈,本来是想学习一下,看看是否能够移植到其他平台上, ...
 - CSU 1997-Seating Arrangement
			
Seating Arrangement Mr. Teacher老师班上一共有n个同学,编号为1到n. 在上课的时候Mr. Teacher要求同学们从左至右按1, 2, -, n的顺序坐成一排,这样每个 ...
 - Python文件与异常处理
			
文件读写 使用python的BIF(build in function)open()进行文件读写操作 # 1.打开文件 data = open(file_name,'w') # 读取模式有很多种,主要 ...
 - POJ1741 Tree (点分治)
			
Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 25772 Accepted: 8566 Description ...
 - IOS开发---菜鸟学习之路--(二)-数据获取
			
第二篇了. 本篇要讲的是数据获取. 为什么将数据获取放在第二篇就讲呢? 因为我在看别人教程的时候都是先讲控件的属性,然后怎么用控件开始. 可是毕竟咱们也是有一定开发经验的人..所以很自然就想先知道怎么 ...
 - linux文件备份到windows方法
			
目录 背景 方案 过程记录 在windows上创建共享目录 将windows上共享的目录绑定到/mnt目录下 问题处理 背景 需编写部门wiki备份数据脚本.但wiki部署在linux上,而需将备份数 ...
 - JAVA 程序监控基础简述
			
最近在项目中自感程序木有问题,也没有什么错误日志出来.但就是有人反映服务慢,有时连不上的情况.为了解决这么妖的问题只能去详细的看看运行中的程序到底出了什么情况,这时如果有个比较好的监控工具可以监控运行 ...