2018.09.12 poj2376Cleaning Shifts(线段树+简单dp)
传送门
貌似贪心能过啊%%%。
本蒟蒻写的线段树优化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)的更多相关文章
- 2018.07.08 hdu4521 小明系列问题——小明序列(线段树+简单dp)
小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Proble ...
- POJ 2376 Cleaning Shifts (线段树优化DP)
题目大意:给你很多条线段,开头结尾是$[l,r]$,让你覆盖整个区间$[1,T]$,求最少的线段数 题目传送门 线段树优化$DP$裸题.. 先去掉所有能被其他线段包含的线段,这种线段一定不在最优解里 ...
- hdu3016 线段树+简单DP
以每个方块左右坐标区间为节点建立字典树,每个节点保存这个区间对应的方块的下标,将方块按照高度排序. 如何得到第i个方块可以移动到的两个方块呢?将所有方块排完序,将前i-1个方块放入字典树,根据第i个方 ...
- Artificial Intelligence Computing Conference(2018.09.12)
时间:2018.09.12地点:北京国际饭店会议中心
- 线段树简单入门 (含普通线段树, zkw线段树, 主席树)
线段树简单入门 递归版线段树 线段树的定义 线段树, 顾名思义, 就是每个节点表示一个区间. 线段树通常维护一些区间的值, 例如区间和. 比如, 上图 \([2, 5]\) 区间的和, 为以下区间的和 ...
- 2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP)
2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP) https://www.luogu.com.cn/problem/P1848 题意: 当农夫约翰闲 ...
- Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)
题目地址:http://codeforces.com/contest/474/problem/E 第一次遇到这样的用线段树来维护DP的题目.ASC中也遇到过,当时也非常自然的想到了线段树维护DP,可是 ...
- 【题解】P4247 [清华集训]序列操作(线段树修改DP)
[题解]P4247 [清华集训]序列操作(线段树修改DP) 一道神仙数据结构(DP)题. 题目大意 给定你一个序列,会区间加和区间变相反数,要你支持查询一段区间内任意选择\(c\)个数乘起来的和.对1 ...
- D - The Bakery CodeForces - 834D 线段树优化dp···
D - The Bakery CodeForces - 834D 这个题目好难啊,我理解了好久,都没有怎么理解好, 这种线段树优化dp,感觉还是很难的. 直接说思路吧,说不清楚就看代码吧. 这个题目转 ...
随机推荐
- 用Redis实现分布式锁 与 实现任务队列【转载】
这一次总结和分享用Redis实现分布式锁 与 实现任务队列 这两大强大的功能.先扯点个人观点,之前我看了一篇博文说博客园的文章大部分都是分享代码,博文里强调说分享思路比分享代码更重要(貌似大概是这个意 ...
- spring集成多个rabbitMQ
转自:https://blog.csdn.net/zz775854904/article/details/81092892 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用 ...
- springboot的全局异常通知
ExceptionHandler:拦截所有通知
- MyEclipse jsp 中文乱码
在最开始加上 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...
- 3 并发编程-(进程)-join方法
1.查看当前进程的进程号getpid() 和 其父 进程号 getppid() # 查看进程的pid from multiprocessing import Process import time,o ...
- this指针的调整
我们先来看一段代码: #include <iostream> using namespace std; class A { public: int a; A( ) { printf(&qu ...
- Asp.net MVC重要
1.asp.net mvc百度解释 2.asp.net mvc各版本特点 3.asp.net mvc知多少 4.asp.net mvc4入门到精通系列目录汇总(邹琼俊)[重要] 5.新年奉献MVC+E ...
- bmp和Variant的转换
procedure TForm2.VariantToBMP(aValue : OleVariant;var aBmp:TBitmap); var Stream : TMemoryStream; ...
- cookie保存用户名及密码
登陆页中,用户输入用户名密码,点击提交,后台对照mysq数据库中,看是否有对应的用户名,以及密码是否正确.如果正确 则将用户名密码分两份Cookie保存.页面跳转到登陆成功页. 用户再次访问登陆页时, ...
- JavaScript 累加求和练习
输入一个数,求从1加到这个数的和 主要代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...