最少区间覆盖问题;

首先我们想到将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的更多相关文章

  1. poj2376 Cleaning Shifts(区间贪心,理解题意)

    https://vjudge.net/problem/POJ-2376 题意理解错了!!真是要仔细看题啊!! 看了poj的discuss才发现,如果前一头牛截止到3,那么下一头牛可以从4开始!!! # ...

  2. POJ2376 Cleaning Shifts

    题意 POJ2376 Cleaning Shifts 0x50「动态规划」例题 http://bailian.openjudge.cn/practice/2376 总时间限制: 1000ms 内存限制 ...

  3. 《挑战程序设计竞赛》2.2 贪心法-区间 POJ2376 POJ1328 POJ3190

    POJ2376 Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14585   Accepte ...

  4. POJ-2376 Cleaning Shifts---区间覆盖&贪心

    题目链接: https://vjudge.net/problem/POJ-2376 题目大意: farmer John要安排他的牛清理牛棚,一共有T个牛棚要清理,每头牛可以清理相邻的牛棚.比如,一头牛 ...

  5. poj-2376 Cleaning Shifts (排序+贪心)

    http://poj.org/problem?id=2376 john有n头牛做打扫工作,他想在t时间内每个时间都至少有一头牛在做打扫工作,第一头牛在1,最后一头牛在t时间,每一头牛工作都有一个开始时 ...

  6. 贪心算法----区间覆盖问题(POJ2376)

    题目: 题目的大概意思是约翰这个农民有N条牛,这些牛可以在一天中的某个时间段可以进行工作,他想把这个时间段分成若干个片段让这些牛去进行打扫任务,你的任务是安排尽量少的牛然后可以完成分成这些片段的打扫任 ...

  7. 【贪心算法】POJ-2376 区间问题

    一.题目 Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cle ...

  8. poj2376 Cleaning Shifts【线段树】【DP】

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32561   Accepted: 7972 ...

  9. POJ2376 Cleaning Shifts 【贪心】

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11542   Accepted: 3004 ...

随机推荐

  1. YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)

           YII 框架源码分析    百度联盟事业部——黄银锋 目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 ...

  2. linux关闭服务的方法

    本文介绍下,在linux下关闭服务的方法,主要学习chkconfig的用法,有需要的朋友参考下. 先来看一个在linux关闭服务的例子,例如,要关闭sendmail服务,则可以按如下操作. 例1, 复 ...

  3. php简单计数器程序(文本计数器、图形计数器)

    分享二个php计数器的例子. 1).文本计数器 <?php $countfile="/count.txt";  //设置保存数据的文件 if (!file_exists($c ...

  4. Web开发——Http协议剖析

    Http,即超文本传输协议,是建立在TCP/IP协议的基础上.在Web开发的过程中,Http协议是十分重要的,浏览器与服务器之间的交互就是基于Http协议的.Http协议如果展开全面讲解会有很多内容, ...

  5. Linux进程间通信IPC学习笔记之有名管道

    基础知识: 有名管道,FIFO先进先出,它是一个单向(半双工)的数据流,不同于管道的是:是最初的Unix IPC形式,可追溯到1973年的Unix第3版.使用其应注意两点: 1)有一个与路径名关联的名 ...

  6. 谈谈java中的WeakReference

    Java语言中为对象的引用分为了四个级别,分别为 强引用 .软引用.弱引用.虚引用. 本文只针对java中的弱引用进行一些分析,如有出入还请多指正. 在分析弱引用之前,先阐述一个概念:什么是对象可到达 ...

  7. html input type="button" 页面跳转

    <div class="message_text"> <p>你的申请已提交,请耐心等候哦!~</p><br /> <input ...

  8. [Jquery] js验证手机号

    function checkIdPhone(id,idErr){ var reg0=/^(13[0-9]|15[012356789]|18[01235,idErr6789]|14[57]|17[0]) ...

  9. Linux命令ln的使用

    ln是linux中一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件. 当我们需要在不同的目录,用到相同的文件时, ...

  10. Android支付接入(五):机锋网

    原地址:http://blog.csdn.net/simdanfeg/article/details/9012083 前边已经陆续跟大家走了一遍运营商和支付宝付费接入,今天跟大家一起看看机锋网的支付接 ...