BZOJ3594 树状数组优化DP
2017-11-24 17:46
369 查看
可以发现每一次区间加都要从[i,n]这样才能让最优
直接上转移方程
f[i][j]表示用了i次区间加操作最高为j所能取得的最大值
f[i][j]=max{f[k][l]|k<i,l⩽j,a[k]+l⩽a[i]+j}+1
这样的转移我们可以用二位树状数组来维护区间最大值
直接上转移方程
f[i][j]表示用了i次区间加操作最高为j所能取得的最大值
f[i][j]=max{f[k][l]|k<i,l⩽j,a[k]+l⩽a[i]+j}+1
这样的转移我们可以用二位树状数组来维护区间最大值
#include<bits/stdc++.h> #define bug(x) cout<<(#x)<<" "<<(x)<<endl #define ll long long #define lowbit(x) (x&(-x)) using namespace std; const int N=1e4+5; inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int n,k,ans; int a ,t[505][5505]; void add(int x,int y,int zjq){ for(int i=x;i<505;i+=lowbit(i)) for(int j=y;j<5505;j+=lowbit(j)) t[i][j]=max(t[i][j],zjq); } int get(int x,int y){ int zjq=0; for(int i=x;i;i-=lowbit(i)) for(int j=y;j;j-=lowbit(j)) zjq=max(t[i][j],zjq); return zjq; } int main(){ #ifdef Devil_Gary freopen("in.txt","r",stdin); #endif n=read(),k=read()+1; for(int i=1;i<=n;i++) a[i]=read(); for(int i=1;i<=n;i++){ for(int j=k;j>=1;j--){ int zjq=get(j,a[i]+j)+1; ans=max(ans,zjq); add(j,a[i]+j,zjq); } } cout<<ans<<endl; }
相关文章推荐
- BZOJ3594 [Scoi2014]方伯伯的玉米田 【树状数组优化dp】
- bzoj 3594(树状数组优化dp)
- [BZOJ3594] [Scoi2014]方伯伯的玉米田 二维树状数组优化dp
- [BZOJ3594]二维树状数组优化DP
- BZOJ3594 二维树状数组优化DP
- bzoj 3594: [Scoi2014]方伯伯的玉米田 二维树状数组优化dp
- 【二维树状数组优化dp】[Scoi2014] bzoj3594方伯伯的玉米田
- BZOJ 3594 方伯伯的玉米田 (二维树状数组优化dp)
- BZOJ3790 神奇项链 解题报告【字符串】【Manacher】【树状数组】【数据结构优化DP】
- bzoj1264 [AHOI2006]基因匹配Match (树状数组优化DP)
- BZOJ 3688 树状数组优化DP 解题报告
- bzoj4361 isn(树状数组优化DP)
- [BZOJ2090/2089] [Poi2010]Monotonicity 2/Monotonicity 树状数组优化dp
- [bzoj1264][AHOI2006]基因匹配Match 树状数组优化dp
- [BZOJ2131]免费的馅饼-树状数组优化DP
- Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
- hdu 2227(树状数组优化dp)
- CodeForces 602E【概率DP】【树状数组优化】
- bzoj3594 方伯伯的玉米田 树状数组优化dp
- [DP] [1D1D优化] [树状数组] [最短路] 遭遇战 (clean)