传送门

鉴于FlashHu大佬讲的这么好(而且我根本不会)我就不再讲一遍了->传送

 //minamoto
#include<iostream>
#include<cstdio>
#include<algorithm>
#define upd(A,L,R) {cmax(A[i][j],A[k][j]+tot[L][R]);\
if(j>=tot[L][R]) cmax(A[i][j],A[k][j-tot[L][R]]);}
#define calc(y) min(x+tot[l][r]+y,Pre[l][x]+suf[r][y])
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
template<class T>inline int min(T&a,T&b){return a<b?a:b;}
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
char sr[<<],z[];int C=-,Z;
inline void Ot(){fwrite(sr,,C+,stdout),C=-;}
inline void print(int x){
if(C><<)Ot();if(x<)sr[++C]=,x=-x;
while(z[++Z]=x%+,x/=);
while(sr[++C]=z[Z],--Z);sr[++C]='\n';
}
const int N=,M=,inf=0x3f3f3f3f;
int s[N],t[N],b[M],tot[M][M],Pre[M][N],suf[M][N],f[M][M];
int main(){
//freopen("testdata.in","r",stdin);
int n=read(),m=,ans;
for(int i=;i<=n;++i){
b[++m]=s[i]=read();
b[++m]=t[i]=read()+s[i];
}
sort(b+,b++m);
m=unique(b+,b++m)-b-;
for(int i=;i<=n;++i){
s[i]=lower_bound(b+,b++m,s[i])-b;
t[i]=lower_bound(b+,b++m,t[i])-b;
for(int l=;l<=s[i];++l)
for(int r=m;r>=t[i];--r) ++tot[l][r];
}
for(int i=;i<=m;++i) for(int j=;j<=n;++j)
Pre[i][j]=suf[i][j]=-inf;
for(int i=;i<=m;++i)
for(int j=;j<=tot[][i];++j)
for(int k=;k<=i;++k) upd(Pre,k,i);
for(int i=m;i;--i)
for(int j=;j<=tot[i][m];++j)
for(int k=i;k<=m;++k) upd(suf,i,k);
for(int l=;l<=m;++l)
for(int r=l+;r<=m;++r)
for(int y=n,x=;x<=n;++x){
int p0=calc(y),p1;
while(y&&p0<=(p1=calc(y-))) p0=p1,--y;
cmax(f[l][r],p0);
}
ans=;
for(int j=;j<=n;++j) cmax(ans,min(Pre[m][j],j));
print(ans);
for(int i=;i<=n;++i){
ans=;
for(int l=;l<=s[i];++l)
for(int r=m;r>=t[i];--r) cmax(ans,f[l][r]);
print(ans);
}
Ot();
return ;
}

洛谷P1973 [NOI2011]Noi嘉年华(决策单调性)的更多相关文章

  1. 洛谷P1973 [NOI2011]Noi嘉年华(动态规划,决策单调性)

    洛谷题目传送门 DP题怕是都要大大的脑洞...... 首先,时间那么大没用,直接离散化. 第一问还好.根据题意容易发现,当一堆活动的时间有大量重叠的时候,更好的办法是把它们全部安排到一边去.那么我们转 ...

  2. luogu P1973 [NOI2011]NOI 嘉年华 dp

    LINK:NOI 嘉年华 一道质量非常高的dp题目. 考虑如何求出第一问 容易想到dp. 按照左端点排序/右端点排序状态还是很难描述. 但是我们知道在时间上肯定是一次选一段 所以就可以直接利用时间点来 ...

  3. 洛谷 P5897 - [IOI2013]wombats(决策单调性优化 dp+线段树分块)

    题面传送门 首先注意到这次行数与列数不同阶,列数只有 \(200\),而行数高达 \(5000\),因此可以考虑以行为下标建线段树,线段树上每个区间 \([l,r]\) 开一个 \(200\times ...

  4. P1973 [NOI2011]Noi嘉年华

    传送门 首先可以把时间区间离散化 然后求出 $cnt[l][r]$ 表示完全在时间 $[l,r]$ 之内的活动数量 设 $f[i][j]$ 表示当前考虑到时间 $i$,第一个会场活动数量为 $j$ 时 ...

  5. 【BZOJ 2436】 2436: [Noi2011]Noi嘉年华 (区间DP)

    2436: [Noi2011]Noi嘉年华 Description NOI2011 在吉林大学开始啦!为了迎接来自全国各地最优秀的信息学选手,吉林大学决定举办两场盛大的 NOI 嘉年华活动,分在两个不 ...

  6. bzoj 2436: [Noi2011]Noi嘉年华

    Description NOI2011 在吉林大学开始啦!为了迎接来自全国各地最优秀的信息学选手,吉林大学决定举办两场盛大的 NOI 嘉年华活动,分在两个不同的地点举办.每个嘉年华可能包含很多个活动, ...

  7. 2436: [Noi2011]Noi嘉年华 - BZOJ

    Description NOI2011 在吉林大学开始啦!为了迎接来自全国各地最优秀的信息学选手,吉林大学决定举办两场盛大的 NOI 嘉年华活动,分在两个不同的地点举办.每个嘉年华可能包含很多个活动, ...

  8. bzoj2436: [Noi2011]Noi嘉年华

    我震惊了,我好菜,我是不是该退役(苦逼) 可以先看看代码里的注释 首先我们先考虑一下第一问好了真做起来也就这个能想想了 那么离散化时间是肯定的,看一手范围猜出是二维DP,那对于两个会场,一个放自变量, ...

  9. NOI2011 NOI嘉年华

    http://www.lydsy.com/JudgeOnline/problem.php?id=2436 首先离散化,离散化后时间范围为[1,cnt]. 求出H[i][j],表示时间范围在[i,j]的 ...

随机推荐

  1. java继承如何理解呢??

    总结:我把他弄的无语了.他是诺基亚公司的软件开发师,大学毕业就可以进那么好的公司.实力 package com.bc; //普通类 class yt { public void price() { S ...

  2. AngularJS:应用

    ylbtech-AngularJS:应用 1.返回顶部 1. AngularJS 应用 现在是时候创建一个真正的 AngularJS 单页 Web 应用(single page web applica ...

  3. 50 states of America

    美国州名 州名英文  州名音标 简写 首府 首府 阿拉巴马州 Alabama   [ˌæləˈbæmə] AL 蒙哥马利 Montgomery[mənt'gʌməri] 阿拉斯加州 Alaska  [ ...

  4. Git学习笔记(二)分支管理与合并及Bug分支

    一.分支管理 1.什么是分支 分支就相当于我们看科幻片里的平行宇宙,如果两个平行宇宙互不干扰,那铁定是啥事儿没有.不过,在某个时间点,两个平行宇宙合并了呢?假如两个宇宙中都有你的影子, 合并之后相当于 ...

  5. Ubuntu bash不记录history方法

    很多都是用: unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG export HISTFILE=/dev/null export HIS ...

  6. QT5提示can not find -lGL的解决方法

    这是由于 Qt5.0 默认将OpenGL加入了工程,但是在机器上没有安装OpenGL,所以jonas只需要在机器上安装OpenGL即可 .   安装建立基本编译环境 首先不可或缺的,就是编译器与基本的 ...

  7. hadoop block大小为128的原因

    1.减轻了namenode的压力 原因是hadoop集群在启动的时候,datanode会上报自己的block的信息给namenode.namenode把这些信息放到内存中.那么如果块变大了,那么nam ...

  8. Shell编程进阶 2.1 shell函数

    函数 vim fun.sh #!/bin/bash function mysum() { sum=$[$+$] echo $sum } a= b= mysum $a $b sh fun.sh 6 可以 ...

  9. vsftp部署和优化错误

    ftp登录失败 vim /etc/vsftpd/vsftpd.conf 添加虚拟机配置的时候有空行,删除空行解决

  10. eclipse 中文版 变成 英文版 方法

    找到目录运行命令 “eclipse.exe -nl en”