传送门

貌似贪心能过啊%%%。

本蒟蒻写的线段树优化dp。

式子很好推啊。

f[i]表示覆盖1~i所需的最小代价。

那么显然对于一个区间[li,ri]" role="presentation" style="position: relative;">[li,ri][li,ri]

有f[ri]=min(f[j])+1,li−1≤j≤ri" role="presentation" style="position: relative;">f[ri]=min(f[j])+1,li−1≤j≤rif[ri]=min(f[j])+1,li−1≤j≤ri

这样推出f[t]的值就行了。

请别忘了给区间排序

代码:

#include<iostream>
#include<cctype>
#include<cstdio>
#include<algorithm>
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
#define N 1000005
using namespace std;
inline int read(){
    int ans=0;
    char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
    return ans;
}
int n,t,f[N];
struct Node{int l,r,mn;}T[N<<2];
struct Q{int l,r;}q[25005];
inline int min(int a,int b){return a<b?a:b;}
inline void pushup(int p){T[p].mn=min(T[lc].mn,T[rc].mn);}
inline void build(int p,int l,int r){
    T[p].l=l,T[p].r=r,T[p].mn=0x3f3f3f3f;
    if(l==r){if(l==0)T[p].mn=0;return;}
    build(lc,l,mid),build(rc,mid+1,r),pushup(p);
}
inline void update(int p,int k,int v){
    if(T[p].l==T[p].r){T[p].mn=v;return;}
    if(k<=mid)update(lc,k,v);
    else update(rc,k,v);
    pushup(p);
}
inline int query(int p,int ql,int qr){
    if(ql>T[p].r||qr<T[p].l)return 0x3f3f3f3f;
    if(ql<=T[p].l&&T[p].r<=qr)return T[p].mn;
    if(qr<=mid)return query(lc,ql,qr);
    if(ql>mid)return query(rc,ql,qr);
    return min(query(lc,ql,mid),query(rc,mid+1,qr));
}
inline bool cmp(Q a,Q b){return a.r==b.r?a.l<b.l:a.r<b.r;}
int main(){
    n=read(),t=read();
    build(1,0,t);
    for(int i=1;i<=n;++i)q[i].l=read(),q[i].r=read();
    for(int i=1;i<=t;++i)f[i]=0x3f3f3f3f;
    sort(q+1,q+n+1,cmp);
    for(int i=1;i<=n;++i){
        if(q[i].l<1)q[i].l=1;
        if(q[i].r>t)q[i].r=t;
        int tmp=query(1,q[i].l-1,q[i].r);
        if(tmp+1<f[q[i].r])f[q[i].r]=tmp+1,update(1,q[i].r,(f[q[i].r]=tmp+1));
    }
    cout<<(f[t]==0x3f3f3f3f?-1:f[t]);
    return 0;
}

2018.09.12 poj2376Cleaning Shifts(线段树+简单dp)的更多相关文章

  1. 2018.07.08 hdu4521 小明系列问题——小明序列(线段树+简单dp)

    小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Proble ...

  2. POJ 2376 Cleaning Shifts (线段树优化DP)

    题目大意:给你很多条线段,开头结尾是$[l,r]$,让你覆盖整个区间$[1,T]$,求最少的线段数 题目传送门 线段树优化$DP$裸题.. 先去掉所有能被其他线段包含的线段,这种线段一定不在最优解里 ...

  3. hdu3016 线段树+简单DP

    以每个方块左右坐标区间为节点建立字典树,每个节点保存这个区间对应的方块的下标,将方块按照高度排序. 如何得到第i个方块可以移动到的两个方块呢?将所有方块排完序,将前i-1个方块放入字典树,根据第i个方 ...

  4. Artificial Intelligence Computing Conference(2018.09.12)

    时间:2018.09.12地点:北京国际饭店会议中心

  5. 线段树简单入门 (含普通线段树, zkw线段树, 主席树)

    线段树简单入门 递归版线段树 线段树的定义 线段树, 顾名思义, 就是每个节点表示一个区间. 线段树通常维护一些区间的值, 例如区间和. 比如, 上图 \([2, 5]\) 区间的和, 为以下区间的和 ...

  6. 2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP)

    2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP) https://www.luogu.com.cn/problem/P1848 题意: 当农夫约翰闲 ...

  7. Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)

    题目地址:http://codeforces.com/contest/474/problem/E 第一次遇到这样的用线段树来维护DP的题目.ASC中也遇到过,当时也非常自然的想到了线段树维护DP,可是 ...

  8. 【题解】P4247 [清华集训]序列操作(线段树修改DP)

    [题解]P4247 [清华集训]序列操作(线段树修改DP) 一道神仙数据结构(DP)题. 题目大意 给定你一个序列,会区间加和区间变相反数,要你支持查询一段区间内任意选择\(c\)个数乘起来的和.对1 ...

  9. D - The Bakery CodeForces - 834D 线段树优化dp···

    D - The Bakery CodeForces - 834D 这个题目好难啊,我理解了好久,都没有怎么理解好, 这种线段树优化dp,感觉还是很难的. 直接说思路吧,说不清楚就看代码吧. 这个题目转 ...

随机推荐

  1. 用Redis实现分布式锁 与 实现任务队列【转载】

    这一次总结和分享用Redis实现分布式锁 与 实现任务队列 这两大强大的功能.先扯点个人观点,之前我看了一篇博文说博客园的文章大部分都是分享代码,博文里强调说分享思路比分享代码更重要(貌似大概是这个意 ...

  2. spring集成多个rabbitMQ

    转自:https://blog.csdn.net/zz775854904/article/details/81092892 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用 ...

  3. springboot的全局异常通知

    ExceptionHandler:拦截所有通知

  4. MyEclipse jsp 中文乱码

    在最开始加上 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...

  5. 3 并发编程-(进程)-join方法

    1.查看当前进程的进程号getpid() 和 其父 进程号 getppid() # 查看进程的pid from multiprocessing import Process import time,o ...

  6. this指针的调整

    我们先来看一段代码: #include <iostream> using namespace std; class A { public: int a; A( ) { printf(&qu ...

  7. Asp.net MVC重要

    1.asp.net mvc百度解释 2.asp.net mvc各版本特点 3.asp.net mvc知多少 4.asp.net mvc4入门到精通系列目录汇总(邹琼俊)[重要] 5.新年奉献MVC+E ...

  8. bmp和Variant的转换

    procedure TForm2.VariantToBMP(aValue : OleVariant;var aBmp:TBitmap); var    Stream : TMemoryStream;  ...

  9. cookie保存用户名及密码

    登陆页中,用户输入用户名密码,点击提交,后台对照mysq数据库中,看是否有对应的用户名,以及密码是否正确.如果正确 则将用户名密码分两份Cookie保存.页面跳转到登陆成功页. 用户再次访问登陆页时, ...

  10. JavaScript 累加求和练习

    输入一个数,求从1加到这个数的和 主要代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...