NOI2005 瑰丽华尔兹
传送门
开始之前先致敬一下伟大的海上钢琴师1900.
我们想到可以对于每一个时间段进行DP,这样的话,用dp[i][j][t]表示在第t个时间段的结束,钢琴在第(i,j)位置的时候最远行走的路程。对于不同的方向转移不大一样,有dp[i][j][t] = max{dp[p][q][t-1] + i - p + j - q},其中(p,q)是上一次钢琴的位置。p,q的范围可以自行进行确定。(至于为什么可以这样转移,因为小天使帮忙固定了,就相当于是你转移的范围变小了)
所以说其实这个也是可以转化为单调队列优化DP的,dp[i][j][t]可以说是由前一段区间(也就是钢琴能滑到的范围转移过来的),直接用单调队列优化一下就可以了。
这道题需要分类讨论四个方向,注意从四个方向的起始点是不同的,然后其他的操作就没什么特殊的啦。由于单调队列可以自动为我们保存在t-1时间段的情况,所以其实t那一维不需要开,直接转化成二维DP。
还有很重要的一点,因为道路上存在箱子,箱子隔开的两段路是不能转移的,所以在DP过程中如果遇到箱子的话,立即清空单调队列,继续DP即可。一开始因为其他地点是不合法情况,要初始化为-INF,只有开始点是0.
看一下代码。
// luogu-judger-enable-o2 #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<cmath> #include<set> #include<queue> #define rep(i,a,n) for(int i = a;i <= n;i++) #define per(i,n,a) for(int i = n;i >= a;i--) #define enter putchar('\n')using namespace std; typedef long long ll; const int M = 10005; const int INF = 1000000009;int read() {int ans = 0,op = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-') op = -1;ch = getchar();}while(ch >= '0' && ch <= '9'){ans *= 10;ans += ch - '0';ch = getchar();}return ans * op; }struct line {int l,r,dir; }a[205];struct node {int val,pos; }q[205];int n,m,sx,sy,k,dp[205][205],g[205][205],head,tail,ans; int dx[5] = {0,-1,1,0,0},dy[5] = {0,0,0,-1,1}; char s[205];void solve(int x,int y,int len,int dir,int t) {head = 1,tail = 0;int cnt = 0;while(++cnt){if(x < 1 || x > n || y < 1 || y > m) break;if(g[x][y]) head = 1,tail = 0;else{while(head <= tail && q[tail].val + cnt - q[tail].pos <= dp[x][y]) tail--;q[++tail].val = dp[x][y],q[tail].pos = cnt;while(head <= tail && q[head].pos < cnt - len) head++;dp[x][y] = max(dp[x][y],q[head].val + cnt - q[head].pos);}x += dx[dir],y += dy[dir];} }int main() {n = read(),m = read(),sx = read(),sy = read(),k = read();rep(i,1,n){scanf("%s",s+1);rep(j,1,m) if(s[j] == 'x') g[i][j] = 1;}rep(i,1,k) a[i].l = read(),a[i].r = read(),a[i].dir = read();memset(dp,-0x3f,sizeof(dp));dp[sx][sy] = 0;rep(p,1,k){int len = a[p].r - a[p].l + 1;if(a[p].dir == 1) rep(i,1,m) solve(n,i,len,a[p].dir,p);if(a[p].dir == 2) rep(i,1,m) solve(1,i,len,a[p].dir,p);if(a[p].dir == 3) rep(i,1,n) solve(i,m,len,a[p].dir,p);if(a[p].dir == 4) rep(i,1,n) solve(i,1,len,a[p].dir,p);}rep(i,1,n)rep(j,1,m) ans = max(ans,dp[i][j]);printf("%d\n",ans);return 0; }
转载于:https://www.cnblogs.com/captain1/p/9929727.html
NOI2005 瑰丽华尔兹相关推荐
- [luogu] P2254 [NOI2005]瑰丽华尔兹
P2254 [NOI2005]瑰丽华尔兹 题目背景 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意? 众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世 ...
- [NOI2005] 瑰丽华尔兹
[NOI2005] 瑰丽华尔兹 \[ \mathfrak{<<The Crave>>} \] 题目大意:\(N\times M\)的矩阵,\(T\)个时间段,某个特定的时间段可 ...
- P2254 [NOI2005]瑰丽华尔兹
P2254 [NOI2005]瑰丽华尔兹 模型总结 单调队列优化线性dp 关键点 单调队列中只需存储下标 只能优化最内层循环 dp[c-1][x][y]>=dp[c-1][x][que[tl]] ...
- BZOJ1499: [NOI2005]瑰丽华尔兹
Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在 ...
- [NOI2005]瑰丽华尔兹
题目背景 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意? 众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在大海上,他的 ...
- [NOI2005]瑰丽华尔兹 动态规划 + 单调队列
Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在 ...
- [NOI2005]瑰丽华尔兹(DP+单调队列优化)
题目来源:https://www.lydsy.com/JudgeOnline/problem.php?id=1499 Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有 ...
- BZOJ 1499 [NOI2005]瑰丽华尔兹 动态规划(+单调队列)
Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在 ...
- bzoj1499 [NOI2005]瑰丽华尔兹
Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在 ...
- 【[NOI2005]瑰丽华尔兹】
非常无脑和码农的单调队列优化\(dp\) 我们发现一个时间段内移动的情况是一样的,而时间段的数目又非常少,所以可以直接按照时间段来进行\(dp\) 由于每一次\(dp\)的移动距离都是小于等于某一个固 ...
最新文章
- [转载]一站式WPF--Window
- L1-018 大笨钟
- HashSet集合介绍
- 轻量级的jQuery表单校验插件: Happy.js
- php的正则匹配方法preg_match_all问题
- 红米note3支持html,红米note3如何检测硬件信息?指令代码说明
- POJ NOI MATH-7654 等差数列末项计算
- phpstudy配置域名后apache无法启动
- 功能详细设计文档模板
- Java处理wangeditor上传图片并升级一下
- 计算机网络教室环境的作用,网络教室环境与多媒体教室环境相比优势在什么地方...
- android 密码输入框 星号,input密码框输入后设置显示为星号或其他样式
- oracle hugepage设置,Linux系统下快速配置HugePages的完整步骤
- 我来学网络——WAN、LAN、MAN带表什么?
- Android下的特殊文件夹
- mysql按中文拼音排序_按拼音排序,mysql 按中文拼音顺序排序
- 4.pycharm(免费专业版)下载与安装与环境配置
- w指令中的IDLE是什么意思
- python读取身份证中的生日信息
- 洛谷:P6062 [USACO05JAN]Muddy Fields G
热门文章
- mysql 字符串搜_Mysql搜索字符串
- linux中iso源码解压_Linux系统下iso文件的制作和解压以及加载
- 分布有限传输速度高的计算机网络,第5章 计算机网络基础.ppt
- IntelliJ IDEA Maven Mybatis generator 自动生成代码 MAC系统
- dubbox 2.8.4的配置和使用
- windows10查看本机IP脚本
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_16_常用的函数式接口_Function接口中练习-自定义函数模型拼接...
- nginx负载均衡的5种策略(转载)
- vuex模块相互调用
- 超市商品购买与管理系统