Vijos1834 NOI2005 瑰丽华尔兹 动态规划 单调双端队列优化
设dp[t][x][y]表示处理完前t个时间段,钢琴停留在(x,y)处,最多可以走多少个格子
转移时只需逆着当前倾斜的方向统计len个格子(len为时间区间的长度,len=t-s+1),如果遇到障碍就中断
转移过程可以用单调非递增的双端队列优化
#include <cstdio>
#include <cstring>
#include <algorithm>
;
const int inf=0x3f3f3f3f;
][maxN][maxN];
char map[maxN][maxN];
int deqv[maxN];
int deqn[maxN];
int head,tail;
int N,M,x,y,K;
inline void resetDeq()
{
head=-; tail=;
}
inline void popDeq(int n,int len)
{
if(tail<head && n-deqn[tail]>len) ++tail;
}
inline void pushDeq(int v,int n)
{
while(head>=tail && v>deqv[head]) --head;
deqv[++head]=v; deqn[head]=n;
}
inline int maxDeq()
{
if(head>=tail) return deqv[tail];
else return -inf;
}
int main()
{
scanf("%d%d%d%d%d",&N,&M,&x,&y,&K);
;i<=N;i++) scanf();
memset(dp,0xc0,sizeof(dp));
dp[][x][y]=;
int s,t,dir;
int len;
while(K--)
{
scanf("%d%d%d",&s,&t,&dir);
len=t-s+;
)
;i<=N;i++)
{
resetDeq();
;j<=M;j++)
{
if(map[i][j]=='.')
{
popDeq(j,len);
dp[][i][j]=std::max(dp[][i][j],maxDeq()+j);
pushDeq(dp[][i][j]-j,j);
}
][i][j]=-inf; }
}
}
)
;i<=N;i++)
{
resetDeq();
for(int j=M;j;j--)
{
if(map[i][j]=='.')
{
popDeq(M-j,len);
dp[][i][j]=std::max(dp[][i][j],maxDeq()+M-j);
pushDeq(dp[][i][j]-M+j,M-j);
}
][i][j]=-inf; }
}
}
)
;j<=M;j++)
{
resetDeq();
;i<=N;i++)
{
if(map[i][j]=='.')
{
popDeq(i,len);
dp[][i][j]=std::max(dp[][i][j],maxDeq()+i);
pushDeq(dp[][i][j]-i,i);
}
][i][j]=-inf; }
}
}
)
;j<=M;j++)
{
resetDeq();
for(int i=N;i;i--)
{
if(map[i][j]=='.')
{
popDeq(N-i,len);
dp[][i][j]=std::max(dp[][i][j],maxDeq()+N-i);
pushDeq(dp[][i][j]+i-N,N-i);
}
][i][j]=-inf; }
}
}
memcpy(dp[],dp[],]));
}
int ans=-inf;
;i<=N;i++)
;j<=M;j++)
ans=std::max(ans,dp[][i][j]);
printf("%d\n",ans);
;
}
Vijos1834 NOI2005 瑰丽华尔兹 动态规划 单调双端队列优化的更多相关文章
- poj 3259 Wormholes : spfa 双端队列优化 判负环 O(k*E)
/** problem: http://poj.org/problem?id=3259 spfa判负环: 当有个点被松弛了n次,则这个点必定为负环中的一个点(n为点的个数) spfa双端队列优化: 维 ...
- 关于SPFA的双端队列优化
7.11 Update 我做题的时候发现这样写会RE 因为在使用双端队列优化SPFA的时候 在将一个点加入队列的时候,如果队列已经空了 那么一旦出现dis[Q.front()]就会RE 可以这样修改 ...
- 2018.09.10 bzoj1499: [NOI2005]瑰丽华尔兹(单调队列优化dp)
传送门 单调队列优化dp好题. 这题其实很简单. 我们很容易想到一个O(T∗n∗m)" role="presentation" style="position: ...
- bzoj1499: [NOI2005]瑰丽华尔兹&&codevs1748 单调队列优化dp
这道题 网上题解还是很多很好的 强烈推荐黄学长 码风真的好看 神犇传送门 学习学习 算是道单调队列优化dp的裸题吧 #include<cstdio> #include<cstring ...
- 洛谷 P2254 [NOI2005]瑰丽华尔兹(单调栈优化DP)
题目描述 不妨认为舞厅是一个N行M列的矩阵,矩阵中的某些方格上堆放了一些家具,其他的则是空地.钢琴可以在空地上滑动,但不能撞上家具或滑出舞厅,否则会损坏钢琴和家具,引来难缠的船长.每个时刻,钢琴都会随 ...
- BZOJ1499:[NOI2005]瑰丽华尔兹(DP,单调队列)
Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在 ...
- BZOJ1499 [NOI2005]瑰丽华尔兹 【单调队列优化dp】
题目 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在大海上,他的名字叫 ...
- 洛谷P2254 [NOI2005]瑰丽华尔兹(单调队列)
传送门 题解 大概就是设$dp[i][x][y]$表示在第$i$个时间段,在$(x,y)$时的最大滑动距离 然后转移是$dp[i][x][y]=max(dp[i-1][x][y],dp[i][x'][ ...
- LuoguP2254 [NOI2005]瑰丽华尔兹 (单调队列优化DP)(用记忆化过了。。。)
记忆化 #include <cstdio> #include <iostream> #include <cstring> #include <algorith ...
随机推荐
- DOS - COPY
copy,中文含义为"复制",一个很容易见名知意的命令,它的作用是复制文件,用法十分简单:copy 源文件 目的路径. 假设,你需要把d:\test\test.txt这个文件复 ...
- 大脑提取每一个体素26领域的matlab代码
%-------------- outer loop for x= 1:40 for y =1:48 for z =1:34 %----------inter loop x=20; y=30; z=1 ...
- 1047 - Neighbor House(简单线性DP)
题目大意: 给你n个房子,要求把房子染成R,G,B三种的一种颜色, 要求相邻的颜色不能一样. dp[第i个房子][第j种颜色] 转移一下就行了. #include<cstdio&g ...
- 【转】模拟器上安装googleplay apk
原文网址:http://blog.sina.com.cn/s/blog_9fc2ff230101gv57.html 1.进入到sdk\android-sdk-windows\tools>目录下: ...
- maya 操作自我整理(二)
随身携带自己的maya习惯我们在一台电脑上设置好自己的使用习惯,包括自己定义的快捷键.标记菜单.界面颜色.工具架等信息,当换到另一个工作环境时再进行设置十分不便利,将自己的习惯随身带走有利于我们更快捷 ...
- JavaScript高级程序设计17.pdf
导航和打开窗口 使用window.open()方法可以导航到一个特定的URL也可以打开一个新的浏览器窗口,接收4个参数:要加载的URL.窗口目标.特性字符串和一个表示新页面是否取代浏览器历史记录中当前 ...
- 前端开发者应当了解的 Web 缓存知识
缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备.对于前端开发者来说,浏览器充当了重要角色.除此外常见的还有各种各样的代理服务器也可以做缓存.当Web请求到达缓存时, ...
- struts2学习笔记(2)---Action中訪问ServletAPI获取Map类型的Servlet元素
源码: strust.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...
- 机房收费系统个人重构关于SQLHelper
近期在敲机房,对于SQLHelper也是心里有些怵,由于原来没用过,可是看了一些博客和资料后发现,假设不用这个类,会大大添加代码量,并且,事实上它并不新,它是一个有多个关于数据库增删改查操作的语句函数 ...
- leetcode题解||Reverse Integer 问题
problem: Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 ...