您的位置:首页 > 其它

洛谷P1973 [NOI2011]Noi嘉年华(决策单调性)

2018-08-28 20:25 309 查看
传送门

鉴于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[1<<21],*p1=buf,*p2=buf;
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
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=0;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*10+num);
(flag)&&(res=-res);
#undef num
return res;
}
char sr[1<<21],z[20];int C=-1,Z;
inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
inline void print(int x){
if(C>1<<20)Ot();if(x<0)sr[++C]=45,x=-x;
while(z[++Z]=x%10+48,x/=10);
while(sr[++C]=z[Z],--Z);sr[++C]='\n';
}
const int N=205,M=405,inf=0x3f3f3f3f;
int s
,t
,b[M],tot[M][M],Pre[M]
,suf[M]
,f[M][M];
int main(){
//freopen("testdata.in","r",stdin);
int n=read(),m=0,ans;
for(int i=1;i<=n;++i){
b[++m]=s[i]=read();
b[++m]=t[i]=read()+s[i];
}
sort(b+1,b+1+m);
m=unique(b+1,b+1+m)-b-1;
for(int i=1;i<=n;++i){
s[i]=lower_bound(b+1,b+1+m,s[i])-b;
t[i]=lower_bound(b+1,b+1+m,t[i])-b;
for(int l=1;l<=s[i];++l)
for(int r=m;r>=t[i];--r) ++tot[l][r];
}
for(int i=1;i<=m;++i) for(int j=1;j<=n;++j)
Pre[i][j]=suf[i][j]=-inf;
for(int i=1;i<=m;++i)
for(int j=0;j<=tot[1][i];++j)
for(int k=1;k<=i;++k) upd(Pre,k,i);
for(int i=m;i;--i)
for(int j=0;j<=tot[i][m];++j)
for(int k=i;k<=m;++k) upd(suf,i,k);
for(int l=1;l<=m;++l)
for(int r=l+1;r<=m;++r)
for(int y=n,x=0;x<=n;++x){
int p0=calc(y),p1;
while(y&&p0<=(p1=calc(y-1))) p0=p1,--y;
cmax(f[l][r],p0);
}
ans=0;
for(int j=1;j<=n;++j) cmax(ans,min(Pre[m][j],j));
print(ans);
for(int i=1;i<=n;++i){
ans=0;
for(int l=1;l<=s[i];++l)
for(int r=m;r>=t[i];--r) cmax(ans,f[l][r]);
print(ans);
}
Ot();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: