hdu4374One hundred layer (DP+单调队列)
http://acm.hdu.edu.cn/showproblem.php?pid=4374
去年多校的题 今年才做 不知道这一年都干嘛去了。。
DP的思路很好想 dp[i][j] = max(dp[i-1][g]+sum[i][j]-sum[i][g-1],dp[i][j]) abs(g-j)<=t 不过复杂度是相当高的 所以呢 就出现了个单调队列 把它优化下
所谓的单调队列其实也就是一队列 始终保持着队头是最大的 若满足不了距离的条件 队头+1 队尾始终保持更新 让满足的了距离而且比队里的更大的元素进来
。。因为一初始化错了 WA了十多次啊 注意:有负数
#include <iostream>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define N 105
#define M 10005
#define LL __int64
int a[N][M],que[M];
int dp[N][M];
int s1[N][M],s2[N][M];
int main()
{
int i,j,n,m,x,t,str,end;
while(cin>>n>>m>>x>>t)
{
memset(dp,,sizeof(dp));
memset(s1,,sizeof(s1));
memset(s2,,sizeof(s2));
for(i = ; i <= n; i++)
for(j = ; j <= m ; j++)
{
scanf("%d",&a[i][j]);
s1[i][j] = s1[i][j-]+a[i][j];
}
for(i = ; i <= n ;i++)
for(j = m ; j >= ; j--)
s2[i][j] = s2[i][j+]+a[i][j];
for(i = x ; i>=&&i>=x-t ; i--)
dp[][i] = s1[][x]-s1[][i-];
for(i = x ; i <= m&&i<=x+t ; i++)
dp[][i] = s2[][x]-s2[][i+];
for(i = ; i <= n ; i++)
{
str = ;end=;
for(j = ;j <= m ; j++)
{
while(str<end&&dp[i-][j]-s1[i][j-]>dp[i-][que[end-]]-s1[i][que[end-]-])
end--;
que[end++] = j;
dp[i][j] = max(dp[i][j],dp[i-][que[str]]-s1[i][que[str]-]+s1[i][j]);
if(j-que[str]>=t)
str++;
}
str = ;end=;
for(j = m ; j >= ; j--)
{
while(str<end&&dp[i-][j]-s2[i][j+]>dp[i-][que[end-]]-s2[i][que[end-]+])
end--;
que[end++] = j;
dp[i][j] = max(dp[i][j],dp[i-][que[str]]-s2[i][que[str]+]+s2[i][j]);
if(que[str]-j>=t)
str++;
}
}
int maxz=dp[n][];
for(i = ; i <= m ; i++)
maxz = max(maxz,dp[n][i]);
cout<<maxz<<endl;
}
return ;
}
hdu4374One hundred layer (DP+单调队列)的更多相关文章
- HDU 4374 One hundred layer(单调队列DP)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=116242#problem/E 题意:差不多就是男人勇下百层的游戏.从第一层到最 ...
- [poj3017] Cut the Sequence (DP + 单调队列优化 + 平衡树优化)
DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the se ...
- DP+单调队列 codevs 1748 瑰丽华尔兹(还不是很懂具体的代码实现)
codevs 1748 瑰丽华尔兹 2005年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 Descripti ...
- 习题:烽火传递(DP+单调队列)
烽火传递[题目描述]烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情.在某两座城市之间有n个烽火台,每个烽火台 ...
- (noip模拟二十一)【BZOJ2500】幸福的道路-树形DP+单调队列
Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的小T发现可以用树来描绘这个草图. ...
- 3622 假期(DP+单调队列优化)
3622 假期 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 黄金 Gold 题目描述 Description 经过几个月辛勤的工作,FJ决定让奶牛放假.假期可以在1-N天内任意选择 ...
- HDU 4374 One hundred layer DP的单调队列优化
One hundred layer Problem Description Now there is a game called the new man down 100th floor. The ...
- bzoj2500: 幸福的道路(树形dp+单调队列)
好题.. 先找出每个节点的树上最长路 由树形DP完成 节点x,设其最长路的子节点为y 对于y的最长路,有向上和向下两种情况: down:y向子节点的最长路g[y][0] up:x的次长路的g[x][1 ...
- URAL 1427. SMS(DP+单调队列)
题目链接 我用的比较传统的办法...单调队列优化了一下,写的有点搓,不管怎样过了...两个单调队列,存两个东西,预处理一个标记数组存... #include <iostream> #inc ...
随机推荐
- JAVA日历
效果图如下: import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import ...
- 392. Is Subsequence
392. Is Subsequence 水题,先是判断长度,长度t比s小,返回false,然后从左到右扫描t,然后同时扫描s,如果相同,s的index就往后拉一个,如果s的index等于s长度,返回t ...
- 使用CHttpFile从服务器端正确的读取数据
前段时间在给软件做升级提示模块的时候发现一个问题,就是使用CHttpFile对象无法从服务器端获取到正确的响应数据长度,无论是使用CHttpFile:: QueryInfo方法,还是使用CHttpFi ...
- c/c++中的各种字符串转换
一:CString 和 *char 的转换: 1:CString -> *char 1)CString转化为*char可以使用CString中的GetBuffer()函数,具体如下: CStri ...
- [HTML]img标签属性
<img src="image.png" width="" height="" align="absmiddle" ...
- phpcms v9后台多表查询分页代码
phpcms v9里面自带的listinfo分页函数蛮好用的,可惜啊.不支持多表查询并分页. 看了一下前台模板层支持get标签,支持多表查询,支持分页.刚好可以把这个功能搬到后台来使用. 我们现在对g ...
- opengl Test
LIBS += -lGL -lGLU -lglut -lGLEW #include <GL/glut.h> #include <iostream> using namespac ...
- Sybase ASE无响应的又一个情况
昨天下午,客户那边的系统管理员给我电话,说有套系统的SYBASE数据库最近有点怪,总是时不时莫名其妙地就忽然卡死,有可能一下子就自动恢复了,也有可能后面一直卡住,只好重启.根据客户反映的状况,初步判断 ...
- Lucene基础(四)-- 结合数据库使用
需求 很多时候我们在用数据库的需要使用模糊查询,我们一般会使用like语句来做,然而这样的做的效率不是很多(很抱歉我们亲自去测,很多都这么说的),那么使用Lucene来检索的话,效率会高很多. luc ...
- CODEVS 2055 集合划分
[题目描述] 对于从1到N(1<=N<=39)的连续整数集合,划分成两个子集合,使得每个集合的数字之和相等. 举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,他们每个的所有数字 ...