1572: [Usaco2009 Open]工作安排Job

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 814  Solved: 365
[Submit][Status]

Description

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位整型。

Input

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

Output

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

Sample Input

3
2 10
1 5
1 7

Sample Output

17

HINT

第1个单位时间完成第3个工作(1,7),然后在第2个单位时间完成第1个工作(2,10)以达到最大利润

Source

Gold

题解:一个比较经典的问题,直接建立一个堆,然后倒着来,到每个时间节点就加上一波,然后将最大的一坨取出来即可

 var
i,j,k,l,m,n,head:longint;
ans:int64;
b:array[..,..] of longint;
a,lef,rig,fix:array[..] of longint;
function min(x,y:longint):longint;inline;
begin
if x<y then min:=x else min:=y;
end; procedure swap(var x,y:longint);inline;
var z:longint;
begin
z:=x;x:=y;y:=z;
end;
procedure sort(l,r:longint);inline;
var i,j,x,y:longint;
begin
i:=l;j:=r;x:=b[(l+r) div ,];
repeat
while b[i,]>x do inc(i);
while b[j,]<x do dec(j);
if i<=j then
begin
swap(b[i,],b[j,]);
swap(b[i,],b[j,]);
inc(i);dec(j);
end;
until i>j;
if i<r then sort(i,r);
if l<j then sort(l,j);
end;
procedure merge(var x,y:longint);inline;
begin
if x= then swap(x,y);
if y= then exit;
if a[x]<a[y] then swap(x,y);
merge(rig[x],y);
fix[x]:=min(fix[lef[x]],fix[rig[x]])+;
if fix[lef[x]]<fix[rig[x]] then swap(lef[x],rig[x]);
end;
function cuthead(var head:longint):longint;inline;
begin
cuthead:=a[head];
merge(lef[head],rig[head]);
head:=lef[head];
end;
begin
readln(n);m:=;head:=;
for i:= to n do readln(b[i,],b[i,]);
sort(,n);
j:=;
ans:=;
while true do
begin
i:=j;
if b[i,]<= then break;
while b[i,]=b[j,] do inc(i);
for k:=j to i- do
begin
inc(m);l:=m;
a[m]:=b[k,];lef[m]:=;rig[m]:=;fix[m]:=;
merge(head,l);
end;
for k:= to b[j,]-b[i,] do
begin
if head= then break;
ans:=ans+cuthead(head);
end;
j:=i;
end;
writeln(ans);
readln;
end.

1572: [Usaco2009 Open]工作安排Job的更多相关文章

  1. BZOJ 1572: [Usaco2009 Open]工作安排Job( 贪心 )

    贪心... 按截止时间排序 , 然后从小到大考虑 . 假设当前考虑第 i 个任务 , 若目前已选工作数 < D_i , 那就选 i ; 否则 若已选工作中利润最小的比 P_i 小 , 那就去除它 ...

  2. 【BZOJ 1572】 1572: [Usaco2009 Open]工作安排Job(贪心+优先队列)

    1572: [Usaco2009 Open]工作安排Job Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单 ...

  3. BZOJ 1572 [Usaco2009 Open]工作安排Job:贪心 + 优先队列【先放再更新】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1572 题意: 有n个工作,每个工作有一个截止日期dead[i]和收益pay[i]. 完成一 ...

  4. 1572: [Usaco2009 Open]工作安排Job[贪心]

    Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有1000000000个单 ...

  5. 【BZOJ】1572: [Usaco2009 Open]工作安排Job

    [题意]给定n项工作的截止时间和价值,每项工作需要1单位时间完成,求最大价值.n<=10^5. [算法]贪心+堆 [题解] 如果是访问到x时将d[x]前的点从价值最大的能加就加是错误的贪心,因为 ...

  6. bzoj 1572: [Usaco2009 Open]工作安排Job

    Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有1000000000个单 ...

  7. BZOJ 1572: [Usaco2009 Open]工作安排Job 贪心 + 堆 + 反悔

    Description Farmer John想修理牧场栅栏的某些小段.为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50, ...

  8. bzoj 1572: [Usaco2009 Open]工作安排Job【贪心+堆】

    先按照时间顺序加,价值塞进小根堆里,碰到不合法情况就从堆里减去 #include<iostream> #include<cstdio> #include<queue> ...

  9. BZOJ1572: [Usaco2009 Open]工作安排Job

    1572: [Usaco2009 Open]工作安排Job Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 775  Solved: 337[Submit ...

随机推荐

  1. HTML5和CSS3

    一.HTML5 HTML5 是 HTML 标准的最新演进版本. 这个术语代表了两个不同的概念:它是一个新的 HTML 语言版本包含了新的元素,属性和行为,同时包含了一系列可以被用来让 Web 站点和应 ...

  2. java_XML_比较【转】

    JAVA解析XML的方式DOM.SAX.DOM4J.JDOM.StAX之详解与比较 1.各种方式的详解 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官 ...

  3. cvs上传复制项目

    现在想重用,特别是重用框架. cvs上传新项目:右键—>team—>share project,根据向导,可选在使用项目名为module名. cvs删除项目:直接在cvs服务器目录上删除项 ...

  4. 关于C++的const对象

    对于const类对象,类指针, 类引用, 只能调用类的const成员函数. 1.const成员函数不允许被修改它所在对象的任何一个成员变量. 2.const成员函数能访问对象的const成员, 而其他 ...

  5. 一道关于call和this的JS面试题

    一个有情怀的程序员...... 2017年始,希望成为一个更好的自己,想自己所想,爱自己所爱 ----------------------------------------------------- ...

  6. jvm垃圾收集小记

    垃圾收集是java与c/c++的最大不同.有了jvm的自动垃圾收集机制,就可以让程序员专注于程序逻辑开发, 而不是花费大量的时间是考虑一个变量应该在什么时候去释放. 下面我们就来简单说一下java的垃 ...

  7. 《经久不衰的Spring框架:SpringMVC 统括》

    前言:经久不衰的Spring 这几年,前端技术更新换代速度之快,每一年"最火的前端技术"排行榜都会换一番场景,本当に信じかねる.是"只闻新人笑不见旧人哭",还是 ...

  8. web前端面试题及答案

    1.常用那几种浏览器测试?有哪些内核(Layout Engine)? 答: (Q1) 浏览器:IE,Chrome,FireFox,Safari,Opera.    (Q2) 内核:Trident,Ge ...

  9. vm虚拟机Kali2.0实现与物理机之间的文件拖动共享

    MarkdownPad Document html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,ab ...

  10. vim高亮设置

    vim高亮设置 前提: 查看vim是否完整安装 rpm -qa | grep vim 若完整安装,则会出现如下相关信息 vim-filesystem-7.4.629-5.el6.x86_64 vim- ...