做这道题走了不少弯路,其实本身也是很简单的,类似单调队列的东西。刚开始以为双关键字排序就行了,结果连WA两遍,忽然意识到可以在截止之前做这件事!!于是就规规矩矩的打队列,然而忘记找队列里的最小P做,当成是单调的了,于是又顺顺利利地WA了好多次了,说多了都是泪啊。。

 var n,i,j,l,r,min,mpos:longint;
ans:int64;
d,p,q:array[..] of longint;
procedure swap(var a,b:longint);
var tem:longint;
begin
tem:=a;
a:=b;
b:=tem;
end;
procedure qs(t,w:longint);
var mid1,mid2,l,r:longint;
begin
l:=t; r:=w;
mid1:=d[(l+r) shr ]; mid2:=p[(l+r) shr ];
repeat
begin
while (d[l]<mid1) or ((d[l]=mid1) and (p[l]<mid2)) do inc(l);
while (d[r]>mid1) or ((d[r]=mid1) and (p[r]>mid2)) do dec(r);
if l<=r then
begin
swap(d[l],d[r]);
swap(p[l],p[r]);
inc(l); dec(r);
end;
end;
until l>r;
if t<r then qs(t,r);
if l<w then qs(l,w);
end;
begin
readln(n);
for i:= to n do
readln(d[i],p[i]);
qs(,n);
{nowd:=-;
for i:= to n do
begin
if nowd<>d[i] then
begin
nowd:=d[i];
inc(ans,p[i]);
end;
end;}
l:=; r:=; q[]:=p[];
for i:= to n do
begin
min:=maxlongint;
if r-l+<d[i] then
begin
inc(r);
q[r]:=p[i];
end
else
begin
for j:=l to r do
if min>q[j] then
begin
min:=q[j];
mpos:=j;
end;
if p[i]>min then
q[mpos]:=p[i];
end;
end;
for i:= to r do inc(ans,q[i]);
writeln(ans);
end.

(转载请注明出处:http://www.cnblogs.com/Kalenda/)

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

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

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

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

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

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

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

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

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

  5. [bzoj1572][Usaco2009 Open]工作安排Job_贪心_堆

    工作安排 Job bzoj-1572 Usaco-2009 Open 题目大意:题目链接. 注释:略. 想法: 我们将任务按照截止时间排序,枚举任务的同时顺便记录出已经做了多少任务(当前时间). 对于 ...

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

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

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

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

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

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

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

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

随机推荐

  1. Qt中QObject中的parent参数

    今天写了一个小程序,验证了带参的构造函数中参数parent的作用. 在MainWindow中声明一个QDialog类型的指针,在MainWindow中对它进行初始化.我采用了两种初始化方式,一种是带参 ...

  2. 跨域请求之JSONP 二

    续上篇,加两个实用功能 1,增加data属性,请求参数2,增加scope属性,可以让回调函数在指定的上下文中执行 接口如下 1 2 3 4 5 6 Sjax.load(url, {     data  ...

  3. Overcome the Dilemma of "unlock" and "trust"

    When examining an Android phone, we have to overcome some barriers first so that we could extract da ...

  4. CentOS6.5安装readline时报错:/usr/bin/ld : cannot find -lncurses

    CentOS6.5安装readline时报错:/usr/bin/ld : cannot find -lncurses 解决方法: 安装ncurses-devel,输入命令: #yum install ...

  5. rpm软件包

    安装软件:rpm -i software.rpm卸载软件:rpm -e software升级形式安装:rpm -U software-new.rpmrpm支持通过http.ftp协议安装软件:rpm ...

  6. css3- border

    css3-border 1.border-color 2.border-image 3.border-radius (  none | <length>{1,4} [ / <leng ...

  7. c# 数据库操作学习

    一. 如何处理数据库连接 1. 数据库连接可以分为“物理连接”和“逻辑连接”(默认使用连接池的情况下Pooling=true): 物理连接:创建数据库连接时,默认会有一定数量的物理连接(默认Min P ...

  8. JMeter2.13进行压力测试

    1.安装 2. 样本数目 总共发送到服务器的请求数. 最新样本 代表时间的数字,是服务器响应最后一个请求的时间 吞吐量 是服务器每分钟处理的请求数. 平均值 是总运行时间除以发送到服务器的请求数. 中 ...

  9. ubuntu 12.04 LTS(64位)安装apache2

    在网上找了很多文章,说法不一,不知道应该用哪种方法,后来想就用其中最简单的吧,装不好再卸了重装, 然后就...装上了,用的是tar包源码安装,下面是步骤 1.去官网下载apache2.2.25源码包, ...

  10. 通过API函数来控制SQLite数据库增删改查

    person类属性有Intenger id,String name,Intenger  age,相应的构造方法和set get方法. package com.xh.tx.dao; import and ...