洛谷P1973 [NOI2011]Noi嘉年华(决策单调性)
鉴于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嘉年华(决策单调性)的更多相关文章
- 洛谷P1973 [NOI2011]Noi嘉年华(动态规划,决策单调性)
洛谷题目传送门 DP题怕是都要大大的脑洞...... 首先,时间那么大没用,直接离散化. 第一问还好.根据题意容易发现,当一堆活动的时间有大量重叠的时候,更好的办法是把它们全部安排到一边去.那么我们转 ...
- luogu P1973 [NOI2011]NOI 嘉年华 dp
LINK:NOI 嘉年华 一道质量非常高的dp题目. 考虑如何求出第一问 容易想到dp. 按照左端点排序/右端点排序状态还是很难描述. 但是我们知道在时间上肯定是一次选一段 所以就可以直接利用时间点来 ...
- 洛谷 P5897 - [IOI2013]wombats(决策单调性优化 dp+线段树分块)
题面传送门 首先注意到这次行数与列数不同阶,列数只有 \(200\),而行数高达 \(5000\),因此可以考虑以行为下标建线段树,线段树上每个区间 \([l,r]\) 开一个 \(200\times ...
- P1973 [NOI2011]Noi嘉年华
传送门 首先可以把时间区间离散化 然后求出 $cnt[l][r]$ 表示完全在时间 $[l,r]$ 之内的活动数量 设 $f[i][j]$ 表示当前考虑到时间 $i$,第一个会场活动数量为 $j$ 时 ...
- 【BZOJ 2436】 2436: [Noi2011]Noi嘉年华 (区间DP)
2436: [Noi2011]Noi嘉年华 Description NOI2011 在吉林大学开始啦!为了迎接来自全国各地最优秀的信息学选手,吉林大学决定举办两场盛大的 NOI 嘉年华活动,分在两个不 ...
- bzoj 2436: [Noi2011]Noi嘉年华
Description NOI2011 在吉林大学开始啦!为了迎接来自全国各地最优秀的信息学选手,吉林大学决定举办两场盛大的 NOI 嘉年华活动,分在两个不同的地点举办.每个嘉年华可能包含很多个活动, ...
- 2436: [Noi2011]Noi嘉年华 - BZOJ
Description NOI2011 在吉林大学开始啦!为了迎接来自全国各地最优秀的信息学选手,吉林大学决定举办两场盛大的 NOI 嘉年华活动,分在两个不同的地点举办.每个嘉年华可能包含很多个活动, ...
- bzoj2436: [Noi2011]Noi嘉年华
我震惊了,我好菜,我是不是该退役(苦逼) 可以先看看代码里的注释 首先我们先考虑一下第一问好了真做起来也就这个能想想了 那么离散化时间是肯定的,看一手范围猜出是二维DP,那对于两个会场,一个放自变量, ...
- NOI2011 NOI嘉年华
http://www.lydsy.com/JudgeOnline/problem.php?id=2436 首先离散化,离散化后时间范围为[1,cnt]. 求出H[i][j],表示时间范围在[i,j]的 ...
随机推荐
- Java中弱引用、软引用、虚引用及强引用的区别
Java中弱引用VS软引用 Java中有如下四种类型的引用: 强引用(Strong Reference) 弱引用(WeakReference) 软引用(SoftReference) 虚引用(Phant ...
- java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结
在web开发中,避免不了对日期的操作,就几种常见的日期操作做个总结(部分参考网络,在此表示感谢): java.util.Date.java.sql.Date.java.sql.Time.java.sq ...
- Oracle监听程序没法启动的一种解决办法
遇到的是监听日志多了 oracle\diag\tnslsnr\WIN-MLPKEV0JE05\listener\trace 删除 日志关闭 lsnrctl set log_status off;
- 监控和安全运维 1.5 nagios监控客户端-1
3. Nagios安装 - 客户端(192.168.0.12)在客户端机器上 rpm -ivh http://www.aminglinux.com/bbs/data/attachment/forum/ ...
- 部署和调优 2.1 squid正向代理
安装squid yum install -y squid Squid 官方网站为 http://www.squid-cache.org 打开注释掉的 cache_dir ufs / 缓存目录的位置,大 ...
- WKWebView的15条应用指南
1.让一个web view充满屏幕 有时候你会看到有人向viewDidLoad()中添加代码,创建一个web view并让它充满整个可用区域.但这样效率很低,用起来很麻烦. 一个简单的方法是在你的视图 ...
- linux ORACLE备份还原(EXP\IMP)
一.Oracle导入导出 1.Oracle的备份是Oracle操作中常见的工作,常见的备份方案有:逻辑备份(IMP&EXP命令进行备份).物理文件备份(脱机及联机备份).利用RMAN(Reco ...
- CustomProgressDialog
1 ,布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...
- maven安装第三方jar包到本地仓库
添加项目依赖的时候,有些jar下载不下来,只有手动下载或安装到本地仓库了 首先下载所需要的jar,放到指定的文件夹 然后执行如下命令: mvn install:install-file -Dfile= ...
- C++面向对象类的实例题目一
在一个程序中,实现如下要求: (1)构造函数重载 (2)成员函数设置默认参数 (3)有一个友元函数 (4)有一个静态函数 (5)使用不同的构造函数创建不同对象 code: #include<io ...