P2254 [NOI2005]瑰丽华尔兹

模型总结

单调队列优化线性dp

关键点

  1. 单调队列中只需存储下标
  2. 只能优化最内层循环
  3. dp[c-1][x][y]>=dp[c-1][x][que[tl]]+dis(x,y,x,que[tl])时才将队尾元素出队;而不仅仅是dp[c-1][x][y]>=dp[c-1][x][que[tl]]。即:用队中所存下标对应状态对当前状态的贡献为依据选择是否留在队中,而不是所存下标对应状态的dp值
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int inf=1e9;
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 f*x;
}
const int maxn=205;
int n,m,sx,sy,k;
char ch[maxn][maxn];
int s[maxn],t[maxn],d[maxn],ed,ans;
int dp[maxn][maxn][maxn];
int dx[6]={0,-1,1,0,0},dy[6]={0,0,0,-1,1};
bool can1(int x,int y){if(x>0&&y>0&&x<=n&&y<=m) return 1;return 0;
}
bool can2(int x,int y){if(ch[x][y]=='.') return 1;return 0;
}
int que[40005],hd,tl;
int dis(int x,int y,int i,int j){if(x==i) return abs(y-j);return abs(x-i);
}
void work1(int c,int x,int y){hd=1; tl=0;int len=t[c]-s[c]+1;while(can1(x,y)){if(can2(x,y)){if(dp[c-1][x][y]!=-inf){while(hd<=tl&&dp[c-1][x][y]>=dp[c-1][que[tl]][y]+dis(x,y,que[tl],y)) tl--;que[++tl]=x;}while(hd<=tl&&dis(x,y,que[hd],y)>len) hd++;if(hd<=tl) dp[c][x][y]=dp[c-1][que[hd]][y]+dis(x,y,que[hd],y);}else{hd=1; tl=0;}x+=dx[d[c]],y+=dy[d[c]];        }
}
void work2(int c,int x,int y){hd=1; tl=0;int len=t[c]-s[c]+1;while(can1(x,y)){if(can2(x,y)){if(dp[c-1][x][y]!=-inf){while(hd<=tl&&dp[c-1][x][y]>=dp[c-1][x][que[tl]]+dis(x,y,x,que[tl])) tl--;que[++tl]=y;}while(hd<=tl&&dis(x,y,x,que[hd])>len) hd++;if(hd<=tl) dp[c][x][y]=dp[c-1][x][que[hd]]+dis(x,y,x,que[hd]);}else{hd=1; tl=0;}x+=dx[d[c]],y+=dy[d[c]];    }
}
int main(){n=read(); m=read(); sx=read(); sy=read(); k=read();for(int i=1;i<=n;i++){scanf("%s",ch[i]+1);}for(int i=1;i<=k;i++){s[i]=read(); t[i]=read(); d[i]=read();}ed=t[k];for(int c=0;c<=k;c++){for(int i=0;i<=n;i++){for(int j=0;j<=m;j++){dp[c][i][j]=-inf;}}}dp[0][sx][sy]=0;for(int c=1;c<=k;c++){if(d[c]==1){for(int j=1;j<=m;j++) work1(c,n,j);}if(d[c]==2){for(int j=1;j<=m;j++) work1(c,1,j);}if(d[c]==3){for(int i=1;i<=n;i++) work2(c,i,m);}if(d[c]==4){for(int i=1;i<=n;i++) work2(c,i,1);}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){ans=max(ans,dp[k][i][j]);}}printf("%d\n",ans);return 0;
}

P2254 [NOI2005]瑰丽华尔兹相关推荐

  1. [luogu] P2254 [NOI2005]瑰丽华尔兹

    P2254 [NOI2005]瑰丽华尔兹 题目背景 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意? 众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世 ...

  2. P2254 [NOI2005] 瑰丽华尔兹

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

  3. [NOI2005] 瑰丽华尔兹

    [NOI2005] 瑰丽华尔兹 \[ \mathfrak{<<The Crave>>} \] 题目大意:\(N\times M\)的矩阵,\(T\)个时间段,某个特定的时间段可 ...

  4. BZOJ1499: [NOI2005]瑰丽华尔兹

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

  5. [NOI2005]瑰丽华尔兹

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

  6. [NOI2005]瑰丽华尔兹 动态规划 + 单调队列

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

  7. [NOI2005]瑰丽华尔兹(DP+单调队列优化)

    题目来源:https://www.lydsy.com/JudgeOnline/problem.php?id=1499 Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有 ...

  8. BZOJ 1499 [NOI2005]瑰丽华尔兹 动态规划(+单调队列)

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

  9. bzoj1499 [NOI2005]瑰丽华尔兹

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

最新文章

  1. 电源适配器变压器计算与元器件选型、细,全!【上篇-适配器设计计算23步骤】...
  2. JQuery 获取节点
  3. Centos root权限的变化
  4. zookeeker如何解决HBase单节点故障
  5. php添加项目,thinkphp添加一个项目
  6. 【数据结构基础笔记】【树】
  7. .net 怎么循环得到数组里的值_HashMap 底层实现、加载因子、容量值及死循环
  8. js 1000+简写为K,10000+简写为W
  9. C# MSchart图表控件安装与使用
  10. SaaSpace:25款最佳免费视频编辑软件工具
  11. 一个Python开源项目-哈勃沙箱源码剖析(下)
  12. 程序员也要学英语——带你理清英语语法思路
  13. 需要在计算机安装msxml版本,win7 Office2010提示安装MSXML版本6.10.1129.0怎么办
  14. TeamViewer的安装和使用方法
  15. 提高迅雷下载速度 超好用,下载速度实实在在的提高了!
  16. 使用OpenSSL模拟SSL证书验证过程
  17. Lagrange Multiplier Theorem——候选人定理
  18. python-turtle(海龟绘图)圣诞树
  19. MyBatis为什么这么“屌”?这些MyBatis的秘密,分分钟吊打面试官
  20. 批处理登陆邮箱代码分析

热门文章

  1. 用友U8各版本操作系统是数据库支持情况
  2. Class 'Imagick' not found——thinkphp
  3. ESTP型人格的性格缺陷和心理问题分析
  4. Bilibili自动跳片头
  5. 2021年全国计算机二级考试时间安排出炉(全年)
  6. 香港和新加坡,谁是亚洲加密金融中心?
  7. 电饼锅的样式图片价格_大型商用电饼铛价格及图片
  8. 使用UltraISO制作OS X系统安装U盘。
  9. 给ecmall添加购物满100免运费的功能
  10. 世界上最遥远的距离是我在百度大厦,你在百度新大厦