$Poj$    $AcWing$    $Luogu$
$ps:$洛谷题目与$Poj$略有不同,以下$Description$是$Poj$版.题目的不同之处在于洛谷中雇用奶牛的费用不相同,所以不可以用贪心法,只能$DP$

$Description$

$Sol$

就是区间覆盖问题$qwq!$

1.$DP$做!

$F[i]$表示覆盖$[1,i]$所需要的最小牛个数

把牛的工作时间按照右端点(结束时间)r[i]从小到大排序,按顺序扫描这些牛.设当前为第$i$头牛,则:

$F[r[i]]=(min_{l_i-1<=j<r_i}^{ }F[j])+1$

$F[0]=0$,其余初始化为+∞

算法导练: 带修改的区间最值问题$???$线段树$!!!$

2.贪心做!

比$DP$好写多了,$DP$还要写线段树...

首先是排序,把所有的区间按照右端点从小到大排序,按顺序扫描这些区间.

简单来说把答案区间依次存在队列中,如果当前区间可以替代队尾区间就删掉队尾,重复循环($while$),然后在把当前区间加入区间

那么怎样的叫可以替代呢,就是当前区间的左端点小于或者等于队尾的前一个区间的右端点加$1$就合法,这样保证了每个点都被覆盖到,满足上述条件,且当前区间比队尾区间的右端点更大(或等),所以当前区间一定更优.

细节:在从左到右扫描区间的过程中,若队尾区间的右端点已经$>=T$,那么一定要跳出循环,否则答案可能偏大

$Code$

#include<bits/stdc++.h>
#define il inline
#define Rg register
#define go(i,a,b) for(Rg int i=a;i<=b;i++)
#define yes(i,a,b) for(Rg int i=a;i>=b;i--)
using namespace std;
il int read()
{
int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
int n,t,p,minl=1e9,maxr;
struct node{int l,r,k;}a[],as[];
il bool cmp(node x,node y){if(x.r==y.r)return x.l<y.l;return x.r<y.r;}
int main()
{
n=read(),t=read();
go(i,,n){a[i]=(node){read(),read()};minl=min(minl,a[i].l),maxr=max(maxr,a[i].r);}
if(minl> || maxr<t){printf("-1\n");return ;}
sort(a+,a+n+,cmp);
bool fl=;
go(i,,n)
{
if(as[p].r>=t)break;
while(p && as[p].k>=a[i].l)p--;
if(a[i].l<=as[p].r+){as[++p]=a[i];as[p].k=as[p-].r+;}
}
if(as[p].r>=t)printf("%d\n",p);
else printf("-1");
return ;
}

贪心 code

随机推荐

  1. Session机制在页面间保持Cookie——大街网

    解决Cookie有效期,页面间Cookie传递 解決大规模,长期有效采集. 之前做一个项目,要采集招聘网站的职位信息,智联,拉钩,中华英才,BOOS,大街网,写完了前4个,大街网数据加载方式是AJAX ...

  2. How To Move Or Rebuild A Lob Partition

    How To Move Or Rebuild A Lob Partition [ID 761388.1]             改动时间 29-JUN-2010     类型 HOWTO     状 ...

  3. 模板—K-D-tree(P2479 [SDOI2010]捉迷藏)

    #include<algorithm> #include<iostream> #include<cstdio> #include<cmath> #def ...

  4. DTCC 2019 | 深度解码阿里数据库实现 数据库内核——基于HLC的分布式事务实现深度剖析

    摘要:分布式事务是分布式数据库最难攻克的技术之一,分布式事务为分布式数据库提供一致性数据访问的支持,保证全局读写原子性和隔离性,提供一体化分布式数据库的用户体验.本文主要分享分布式数据库中的时钟解决方 ...

  5. poj 2451 Uyuw's Concert (半平面交)

    2451 -- Uyuw's Concert 继续半平面交,这还是简单的半平面交求面积,不过输入用cin超时了一次. 代码如下: #include <cstdio> #include &l ...

  6. input 的 pattern 验证表单

    pattern 用于定义验证输入正则表达式 pattern 属性适用于以下 <input> 类型:text, search, url, telephone, email 以及 passwo ...

  7. Python--day61--ORM介绍及Django使用ORM创建表

    ORM: 使用django的ORM详细步骤:(pymysql操作数据库:) #1,自己动手创建数据库(create database 数据库名字;) #2,在Django项目中(setting.py文 ...

  8. 4-3 xpath的用法

  9. H3C IPv6地址自动配置

  10. element-ui后台管理系统表单resetFields功能实现

    项目中有‘新增’和‘编辑’弹出dialog功能,并且为同一个dialog. html代码: 新增时,这样的样式 编辑时,这样的样式 所以在编辑完关闭dialog后,需要清空表单,一开始简单的使用了el ...