设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 瑰丽华尔兹 动态规划 单调双端队列优化的更多相关文章

  1. poj 3259 Wormholes : spfa 双端队列优化 判负环 O(k*E)

    /** problem: http://poj.org/problem?id=3259 spfa判负环: 当有个点被松弛了n次,则这个点必定为负环中的一个点(n为点的个数) spfa双端队列优化: 维 ...

  2. 关于SPFA的双端队列优化

    7.11 Update 我做题的时候发现这样写会RE 因为在使用双端队列优化SPFA的时候 在将一个点加入队列的时候,如果队列已经空了 那么一旦出现dis[Q.front()]就会RE 可以这样修改 ...

  3. 2018.09.10 bzoj1499: [NOI2005]瑰丽华尔兹(单调队列优化dp)

    传送门 单调队列优化dp好题. 这题其实很简单. 我们很容易想到一个O(T∗n∗m)" role="presentation" style="position: ...

  4. bzoj1499: [NOI2005]瑰丽华尔兹&&codevs1748 单调队列优化dp

    这道题 网上题解还是很多很好的 强烈推荐黄学长 码风真的好看 神犇传送门 学习学习 算是道单调队列优化dp的裸题吧 #include<cstdio> #include<cstring ...

  5. 洛谷 P2254 [NOI2005]瑰丽华尔兹(单调栈优化DP)

    题目描述 不妨认为舞厅是一个N行M列的矩阵,矩阵中的某些方格上堆放了一些家具,其他的则是空地.钢琴可以在空地上滑动,但不能撞上家具或滑出舞厅,否则会损坏钢琴和家具,引来难缠的船长.每个时刻,钢琴都会随 ...

  6. BZOJ1499:[NOI2005]瑰丽华尔兹(DP,单调队列)

    Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在 ...

  7. BZOJ1499 [NOI2005]瑰丽华尔兹 【单调队列优化dp】

    题目 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在大海上,他的名字叫 ...

  8. 洛谷P2254 [NOI2005]瑰丽华尔兹(单调队列)

    传送门 题解 大概就是设$dp[i][x][y]$表示在第$i$个时间段,在$(x,y)$时的最大滑动距离 然后转移是$dp[i][x][y]=max(dp[i-1][x][y],dp[i][x'][ ...

  9. LuoguP2254 [NOI2005]瑰丽华尔兹 (单调队列优化DP)(用记忆化过了。。。)

    记忆化 #include <cstdio> #include <iostream> #include <cstring> #include <algorith ...

随机推荐

  1. 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to

    警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 警告: [SetPro ...

  2. 数据结构(莫队算法):国家集训队2010 小Z的袜子

    [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到 ...

  3. Linux下的各种软件安装方法汇总

    1 RPM包 1.1 安装 RPM包就像Windows的EXE安装文件一样,各种文件都已经编译好了,并进行了打包,哪一个文件应该放在哪一个目录下都指定好了,安装非常方便,在图形界面里你只需要双击就能自 ...

  4. java基础(八) 面向对象(三)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  5. mac下的改装人生——关于mc700安装双硬盘以后的win重装问题

    宝贝到家~玩了几天,感觉神清气爽~今天正式开始准备工作了哈. 今天早上开了mac的win7系统发现了几个小问题.好吧我承认这个真的是小问题,就是我没有办法能调整屏幕的亮度了.重装了bootcamp依然 ...

  6. SharePoint 2013的100个新功能之网站管理(二)

    一:SharePoint 2013的网站策略 网站策略指的是自动关闭或删除网站的条件.有四个选项:不自动关闭或删除网站.自动删除网站.自动关闭并删除网站和运行一个工作流来关闭.删除网站. 二:新的主题 ...

  7. .net web 开发平台- 表单设计器 一(web版)

    如今为了适应需求的不断变化,动态表单设计器应运而生.它主要是为了满足界面的不断变化和提高开发速度.比如:一些页面客户可能也无法确定页面的终于布局,控件的位置,在哪种情况下显示或不显示等可能须要随时改动 ...

  8. Delphi Memo的记事本功能

    Delphi Memo的记事本功能           下载地址 : http://download.csdn.net/detail/teststudio/6412883 这个代码实现了Windows ...

  9. MVC系列之开始

     4月5号晚本来应该写出来的,这几天迷上了炉石传说,打得有点疯,明天又得上班了,收拾心情还是得写出来.上星期5晚上回家的时候,不得不吐槽一下的确有点背.6点下班冲去江夏地铁站,赶7点15分到江门的轻轨 ...

  10. [AngualrJS + Webpack] Production Source Maps

    When you uglify your Angular code with Webpack's uglify plugin, debugging your application can be a ...