OJ 26217 :Work Scheduling(贪心+优先队列)
Farmer John has so very many jobs to do! In order to run the farm efficiently, he must make money on the jobs he does, each one of which takes just one time unit.
His work day starts at time 0 and has 1,000,000,000 time units (!). He currently can choose from any of N (1 ≤ N ≤ 100,000) jobs conveniently numbered 1..N for work to do. It is possible but extremely unlikely that he has time for all Njobs since he can only work on one job during any time unit and the deadlines tend to fall so that he can not perform all the tasks.
Job i has deadline Di (1 ≤ Di ≤ 1,000,000,000). If he finishes job i by then, he makes a profit of Pi (1 ≤ Pi ≤ 1,000,000,000).
What is the maximum total profit that FJ can earn from a given list of jobs and deadlines? The answer might not fit into a 32-bit integer.
Multipel test cases. For each case :
* Line 1: A single integer: N
* Lines 2..N+1: Line i+1 contains two space-separated integers: Di and Pi
For each case, output one line : A single number on a line by itself that is the maximum possible profit FJ can earn.
3
2 10
1 5
1 7
17
Complete job 3 (1, 7) at time 1 and complete job 1 (2, 10) at time 2 to maximize the earnings (7 + 10 → 17).
这道题的贪心的策略就是:
先把所有的价值都加进去.然后同步统计一个now统计时间.
如果当前时间已经超过了实现,那么我们就减掉价值最小的.
然后这个价值最小的用一个堆就可以维护.
AC代码:
#include<stdio.h>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
#define MAX 100008
struct nod
{
ll d;
ll p;
}a[MAX];
bool cmp (nod a,nod b)
{
if(a.d!=b.d)
return a.d<b.d;
return a.p<b.p;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
priority_queue<int,vector<int>,greater<int> >q;
for(int i= ; i<n ; i++)
scanf("%d%d",&a[i].d,&a[i].p);
sort(a,a+n,cmp);
ll sum=;
ll now=;
for(int i= ; i<n ; i++)
{
now++;
sum+=a[i].p;
q.push(a[i].p);
if(now>a[i].d)
{
sum-=q.top();
q.pop();
now--;
}
}
printf("%lld\n",sum);
}
}
最新文章
- css布局模式
- sql查询最大的见多了,查询第二的呢???
- Android中文乱码彻底解决
- ubuntu_scrapy 安装
- ANDROID_MARS学习笔记_S02_014_GSON解析JSON串为对象
- mac安装office2011,提示无法打开文件Normal.dotm,因为内容有错误
- MVC 返回 view
- json的引号之伤
- 20 ViewPager总结
- 【Qt编程】基于Qt的词典开发系列<;十三>;音频播放
- 5.2 SW1控制LED1亮灭(中断功能)
- [20170703]从备份集取出spfile转化为pfile.txt
- lua元表学习
- 跨域 jsonp 和 CORS 资料
- Android Data Binding Library
- LINUX中的ACL
- HTML5播放器 MediaElement.js 使用方法
- Python :random 随机数生成
- [转载] 我的WafBypass之道(SQL注入篇)
- 预备作业03:虚拟机安装及Linux操作系统练习
热门文章
- jQuery-图片的放大镜显示效果(不需要大小图) ,放大镜图层显示在图片左右侧,不适用table
- Python01 python入门介绍
- 15-struct(构造函数,重载)
- 关于photoshop处理图片的自动化
- 10.model/view实例(2)
- 树莓派研究笔记(5)-- FM网络收音机
- SDUT 3379 数据结构实验之查找七:线性之哈希表
- SDUT 3375 数据结构实验之查找三:树的种类统计
- for循环 break
- (转)深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的