【HDU4374】One hundred layer-单调队列优化DP
来源:互联网 发布:matlab中粒子群算法 编辑:程序博客网 时间:2024/06/05 03:19
测试地址:One hundred layer
题目大意:一座塔有
做法:本题是一个单调队列优化DP的题目。
这一题是DP应该能很显然地看出来,设
其中
考虑到向左走和向右走两种情况是对称的,所以我们这里只讨论向左走的情况。我们处理出了前缀和
我们发现
观察发现,
对于向右走的情况同理,这里就不赘述了,最后算法的时间复杂度为
最后还需要注意的是,输入可能有多组测试数据,小心不要被坑了……
以下是本人代码:
#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#define inf 1000000000using namespace std;int n,m,x,t;int a[110][10010],f[110][10010],lsum[110][10010],rsum[110][10010];int q[10010],head,tail;int main(){ while(scanf("%d%d%d%d",&n,&m,&x,&t)!=EOF) { memset(lsum,0,sizeof(lsum)); memset(rsum,0,sizeof(rsum)); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); for(int i=1;i<=m;i++) f[n+1][i]=0; for(int i=1;i<=n;i++) { lsum[i][0]=rsum[i][m+1]=0; for(int j=1;j<=m;j++) lsum[i][j]=lsum[i][j-1]+a[i][j]; for(int j=m;j>=1;j--) rsum[i][j]=rsum[i][j+1]+a[i][j]; } for(int i=n;i>=1;i--) { head=1,tail=0; for(int j=1;j<=m;j++) { f[i][j]=-inf; while(head<=tail&&q[head]<j-t) head++; while(head<=tail&&f[i+1][j]-lsum[i][j-1]>=f[i+1][q[tail]]-lsum[i][q[tail]-1]) tail--; q[++tail]=j; f[i][j]=max(f[i][j],f[i+1][q[head]]+lsum[i][j]-lsum[i][q[head]-1]); } head=1,tail=0; for(int j=m;j>=1;j--) { while(head<=tail&&q[head]>j+t) head++; while(head<=tail&&f[i+1][j]-rsum[i][j+1]>=f[i+1][q[tail]]-rsum[i][q[tail]+1]) tail--; q[++tail]=j; f[i][j]=max(f[i][j],f[i+1][q[head]]+rsum[i][j]-rsum[i][q[head]+1]); } } printf("%d\n",f[1][x]); } return 0;}
- HDU4374:One hundred layer(dp+单调队列优化)
- 【HDU4374】One hundred layer-单调队列优化DP
- hdu4374 One hundred layer(单调队列维护dp)
- [DP] hdu 4374 One hundred layer #单调队列优化
- hdu 4374 One hundred layer 单调队列优化dp
- hdu 4374 One hundred layer(单调队列优化dp)
- HDU 4374 One hundred layer(单调队列优化dp)
- hdu 4374 One hundred layer 单调队列优化dp
- hdu4374 One hundred layer
- hdu4374 One hundred layer
- hdu4374 One hundred layer
- HDU 4374 One hundred layer(单调队列+DP)
- hdu 4374 One hundred layer【单调队列DP】
- MUTC8 E- One hundred layer 单调队列dp
- hdu 4374 One hundred layer (DP+单调队列)@
- hdu4374 单调队列优化dp
- 【单调队列】 HDOJ One hundred layer
- 单调队列HDU 4374 One hundred layer
- CodeForces-208B Solitaire
- Moving Tables
- ios11使用tableView的一些问题
- 构造表达式树
- codeforces 582D
- 【HDU4374】One hundred layer-单调队列优化DP
- tablayout
- 模拟 [bzoj 4582] Diamond Collector
- 遇到多个构造器参数时要考虑用构建器Bulider
- 后缀数组入门练习
- QGraphicsItem的缩放
- 9.20...
- 知识点复习
- Spring AOP 之 通知、连接点、切点、切面