poj2376
最少区间覆盖问题;
首先我们想到将r排序,则以得出dp方程
f[i]=1 (l[i]=1)
=min{f[j]}+1 (r[j]+1>=l[i])
最后ans是min{f[j]} (r[j]>=t);
很显然O(n^2),会超时;
考虑到r已经升序排列,对于一个f[i],如果f[i]<f[j] (i>j) 显然,使用i覆盖比使用j覆盖更优;
于是我们想到用单调队列来优化,维护一个r[j],f[j]都单调增的队列,具体代码如下:
var f,p,q,w:array[..] of longint; //w为单调队列,存放标号
ans,i,j,z,t,n,m:longint;
function find(x:longint):longint; //查找
var m,l,r,v:longint;
begin
l:=;
r:=t;
repeat //二分查找,常和单调队列联系使用
m:=(l+r) div ;
if q[w[m]]+>=p[x] then
begin
r:=m-;
v:=m;
end else l:=m+;
until l>r;
exit(w[v]);
end;
procedure putin; //入队
var l,r,m:longint;
begin
if f[i]>f[w[t]] then
begin
t:=t+;
w[t]:=i;
end
else begin
l:=;
r:=t;
repeat //寻找一个合适的位子
m:=(l+r) div ;
if (f[w[m]]>=f[i]) and (f[w[m-]]<f[i]) then break;
if (f[w[m]]>=f[i]) then r:=m- else l:=m+;
until l>r;
t:=m; //由之前知,队列中m后面的一定不如当前的i优,退队
w[m]:=i;
end;
end;
begin
readln(n,m);
for i:= to n do
readln(p[i],q[i]);
sort(,n); //以Q为关键字升序排序,省略
for i:= to n do
begin
if p[i]<= then
begin
f[i]:=;
putin;
continue;
end;
z:=find(i);
if z= then
begin
f[i]:=;
continue;
end;
f[i]:=f[z]+; //dp
putin;
end;
ans:=;
for i:=n downto do
if q[i]>=m then ans:=min(ans,f[i]) else break; //寻找最小值
if ans= then writeln(-) else writeln(ans);
end.
易知复杂度为O(nlogn)可以AC
poj2376的更多相关文章
- poj2376 Cleaning Shifts(区间贪心,理解题意)
https://vjudge.net/problem/POJ-2376 题意理解错了!!真是要仔细看题啊!! 看了poj的discuss才发现,如果前一头牛截止到3,那么下一头牛可以从4开始!!! # ...
- POJ2376 Cleaning Shifts
题意 POJ2376 Cleaning Shifts 0x50「动态规划」例题 http://bailian.openjudge.cn/practice/2376 总时间限制: 1000ms 内存限制 ...
- 《挑战程序设计竞赛》2.2 贪心法-区间 POJ2376 POJ1328 POJ3190
POJ2376 Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14585 Accepte ...
- POJ-2376 Cleaning Shifts---区间覆盖&贪心
题目链接: https://vjudge.net/problem/POJ-2376 题目大意: farmer John要安排他的牛清理牛棚,一共有T个牛棚要清理,每头牛可以清理相邻的牛棚.比如,一头牛 ...
- poj-2376 Cleaning Shifts (排序+贪心)
http://poj.org/problem?id=2376 john有n头牛做打扫工作,他想在t时间内每个时间都至少有一头牛在做打扫工作,第一头牛在1,最后一头牛在t时间,每一头牛工作都有一个开始时 ...
- 贪心算法----区间覆盖问题(POJ2376)
题目: 题目的大概意思是约翰这个农民有N条牛,这些牛可以在一天中的某个时间段可以进行工作,他想把这个时间段分成若干个片段让这些牛去进行打扫任务,你的任务是安排尽量少的牛然后可以完成分成这些片段的打扫任 ...
- 【贪心算法】POJ-2376 区间问题
一.题目 Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cle ...
- poj2376 Cleaning Shifts【线段树】【DP】
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 32561 Accepted: 7972 ...
- POJ2376 Cleaning Shifts 【贪心】
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11542 Accepted: 3004 ...
随机推荐
- Android Wear预览版——尝鲜
前两天Google推出了Android Wear的SDK,稍稍的瞧了一眼,发现这个预览版的功能还是比较简单的,只有一个通知转发的功能,不过就这么一个功能,带来的效果却是Very Good~~ 功能:发 ...
- 64位CentOS 6.4下安装wine(32位)
1. 到http://dl.fedoraproject.org/pub/epel/6/x86_64/repoview/epel-release.html下载epel-release-6-8.noarc ...
- mysql_sql语句之美
无线地址及数量统计 单个用户无线登录信息统计
- win10 安装scrapy
在win10的环境下安装scrapy,并不能直接按照官网的手册(http://doc.scrapy.org/en/1.0/intro/install.html)一次性安装成功,根据我自己的安装过程中遇 ...
- 手把手教你写LKM rookit! 之 第一个lkm程序及模块隐藏(一)
唉,一开始在纠结起个什么名字,感觉名字常常的很装逼,于是起了个这<手把手教你写LKM rookit> 我觉得: 你们觉得:...... 开始之前,我们先来理解一句话:一切的操作都是系统调用 ...
- 《WPF程序设计指南》读书笔记——第8章 依赖属性
1.依赖属性的效果 一旦规定视觉树上一个对象的fontsize属性,那么属于他的节点之下的所有对象都会沿袭这个属性,然而如果某个子节点明确的设定了自己的fontsize,就不会沿袭父节点的fontsi ...
- php源代码安装常见错误与解决办法分享
错误:configure: error: libevent >= 1.4.11 could not be found 解决:yum -y install libevent libevent-de ...
- 微软职位内部推荐-Senior Data Scientist
微软近期Open的职位: Extracting accurate, insightful and actionable information from data is part art and pa ...
- 过滤菜鸟的iOS面试题-b
网上已经有很多针对各种知识点的面试题,面试时有些人未必真正理解也能通过背题看上去很懂.我自己总结了4道面试题,好快速的判断这个人是否是一个合格的工程师,欢迎大家点评. 1.struct和class的区 ...
- 1064: [Noi2008]假面舞会 - BZOJ
Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办 ...