题目描述

Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间。 他的工作日从0时刻开始,有1000000000个单位时间(!)。在任一时刻,他都可以选择编号1~N的N(1 <= N <= 100000)项工作中的任意一项工作来完成。 因为他在每个单位时间里只能做一个工作,而每项工作又有一个截止日期,所以他很难有时间完成所有N个工作,虽然还是有可能。 对于第i个工作,有一个截止时间D_i(1 <= D_i <= 1000000000),如果他可以完成这个工作,那么他可以获利P_i( 1<=P_i<=1000000000 ). 在给定的工作利润和截止时间下,FJ能够获得的利润最大为多少呢?答案可能会超过32位整型。

输入

第1行:一个整数N. 第2~N+1行:第i+1行有两个用空格分开的整数:D_i和P_i.

输出

输出一行,里面有一个整数,表示最大获利值。

样例输入

3
2 10
1 5
1 7

样例输出

17


题解

贪心

原本以为是按照p从大到小排序,结果发现这样做的话代码没法写。

于是改变策略,按d从小到大排序。

每次找到一个工作以后,看时间能否满足。

如果能,就选它,把它加到小根堆中,并把时间+1.

若不能,就看堆中最小元素是否比p要小,如果是,则删除那个元素,再添加当前元素。

由于priority_queue默认是大根堆,所以我把p取相反数后再加进堆中,就变成小根堆了。

#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long lint;
struct data
{
int d;
lint p;
}a[100010];
priority_queue<lint> q;
bool cmp(data a , data b)
{
return a.d < b.d;
}
int main()
{
int n , i , now = 0;
lint x , ans = 0;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ )
scanf("%d%lld" , &a[i].d , &a[i].p);
sort(a + 1 , a + n + 1 , cmp);
for(i = 1 ; i <= n ; i ++ )
{
if(now < a[i].d)
q.push(-a[i].p) , ans += a[i].p , now ++ ;
else
{
x = -q.top();
if(x < a[i].p)
{
q.pop();
ans -= x;
q.push(-a[i].p);
ans += a[i].p;
}
}
}
printf("%lld\n" , ans);
return 0;
}

最新文章

  1. c++ cout介绍与实现自己的cout
  2. 使用ASP.NET Web API 2创建OData v4 终结点
  3. 自己动手编译hadoop-2.5.2源码
  4. Liferay 6.2 改造系列之十三:修改用户编辑页面表单内容
  5. 30.编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。
  6. R语言绘图高质量输出
  7. socket学习笔记——线程(聊天程序)
  8. VS2010/MFC对话框:字体对话框
  9. Myeclipse去掉恶心的弹框
  10. 【笔记】nodejs读取JSON,数组转树
  11. Mac对gdb签名
  12. selenium RC 环境配置
  13. MySql 中文写入数据库乱码及Incorrect string value: &#39;\xF0\x9F...&#39; for column &#39;XXX&#39; at row 1解决
  14. RFID系统 免费开源代码 开发,分享[申明:来源于网络]
  15. office 安装
  16. tar命令的使用方法
  17. shell 变量的数值计算实践 expr
  18. LogUtil工具
  19. HTML5将&lt;video&gt;视频设置为页面动态背景
  20. 11-DOM介绍

热门文章

  1. 成都Uber优步司机奖励政策(4月4日)
  2. 从细节处谈Android冷启动优化
  3. C# 组装XML传给webserver+XML 返回获取多个xml,根据多个XML 返回dataset类型
  4. Selenium 入门到精通系列:五
  5. 韦大仙--Katalon---一款好用的selenium自动化测试插件
  6. lintcode174 删除链表中倒数第n个节点
  7. 返回json数组的GET接口
  8. Django创建App报错
  9. [Install] TeamViewer
  10. LeetCode - 459. Repeated Substring Pattern - O(n)和O(n^2)两种思路 - KMP - (C++) - 解题报告