[NOI2005] 瑰丽华尔兹

\[ \mathfrak{<<The Crave>>} \]

题目大意:\(N\times M\)的矩阵,\(T\)个时间段,某个特定的时间段可以向一个方向滑动或不滑动,不可以撞到边界和障碍,求最长滑动距离

Solution

  • \({f[k][i][j]}\)为第\(i\)个时间段结束时走到\((i,j)\)的最长滑动距离,无法到达表示为\(-\infty\),设\(len=t_k-s_k+1\),即第\(k\)个时间段的持续时间
  • \(f[k][i][j]=\max\limits_{j-len\leq t\leq j}(f[k-1][i][t]+j-t)=\max\limits_{j-len\leq t\leq j}(f[k-1][i][t]-t)+j\)(这是向右走)

我们可以维护一个单调队列,保存\(k−1\)时刻的所有可行状态的\(f\)值与\(t\),保证\(t\)单调递增,\(f\)值单调递减,在\(dp\)到第\(t\)段时,首先枚举行\(i\),然后从左到右来枚举\(j\),并时刻保证队首的\(t\)满足限制条件j−t≤len,这样的单调队列的队首显然是最优的,用此时的队首的\(f[k−1][i][t]+j-t\)来更新答案。

Code

#include <bits/stdc++.h>using namespace std;const int N = 205;
const int INF = 2147483644;
const int dx[] = {0, -1, 1, 0, 0};
const int dy[] = {0, 0, 0, -1, 1};//第一位是0 char qwq[N][N];int n, m, T, ans;
int dp[N][N];struct Node {int dp, pos;
}q[N];//一行或一列 void solve(int x, int y, int len, int d) {int head = 1, tail = 0;for(int i = 1; x >= 1 && x <= n && y >= 1 && y <= m;  i++, x += dx[d], y += dy[d]) {//一直朝一个方向走if(qwq[x][y] == 'x') head = 1, tail = 0;//之前的都清除else {while(head <= tail && q[tail].dp + i - q[tail].pos < dp[x][y]) tail--;//不符合单调递减的单调队列性质 q[++tail] = Node{dp[x][y], i};//入队 if(q[tail].pos - q[head].pos > len) head++;//队首元素超出"max()"的范围 dp[x][y] = q[head].dp + i - q[head].pos;//i-q[head].pos 就是这个时间段走的距离 ans = max(ans, dp[x][y]);}}return;
}int main () {int sx, sy;scanf("%d %d %d %d %d", &n, &m, &sx, &sy, &T);for(int i = 1; i <= n; ++i)scanf("%s", qwq[i] + 1);for(int i = 1; i <= n; ++i)for(int j = 1; j <= m; ++j) // dp[i][j] = -INF;dp[sx][sy] = 0;//其他地方都是-INF for(int i = 1, s, t, d, len; i <= T; ++i) {scanf("%d %d %d", &s, &t, &d);len = t - s + 1;if(d == 1) for(int j = 1; j <= m; ++j) solve(n, j, len, d);//向上if(d == 2) for(int j = 1; j <= m; ++j) solve(1, j, len, d);//向下if(d == 3) for(int j = 1; j <= n; ++j) solve(j, m, len, d);//向左if(d == 4) for(int j = 1; j <= n; ++j) solve(j, 1, len, d);//向右     }cout << ans << endl;        return 0;
}

转载于:https://www.cnblogs.com/LMSH7/p/9684632.html

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

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

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

  2. P2254 [NOI2005]瑰丽华尔兹

    P2254 [NOI2005]瑰丽华尔兹 模型总结 单调队列优化线性dp 关键点 单调队列中只需存储下标 只能优化最内层循环 dp[c-1][x][y]>=dp[c-1][x][que[tl]] ...

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

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

  4. [NOI2005]瑰丽华尔兹

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

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

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

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

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

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

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

  8. bzoj1499 [NOI2005]瑰丽华尔兹

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

  9. 【[NOI2005]瑰丽华尔兹】

    非常无脑和码农的单调队列优化\(dp\) 我们发现一个时间段内移动的情况是一样的,而时间段的数目又非常少,所以可以直接按照时间段来进行\(dp\) 由于每一次\(dp\)的移动距离都是小于等于某一个固 ...

最新文章

  1. HTMLCollection元素的For循环
  2. Java Web开发Tomcat中三种部署项目的方法
  3. 边缘提取和场景分割 学派?
  4. mahout贝叶斯算法开发思路(拓展篇)1
  5. 使用CSVDE批量导入命令/出口AD用户
  6. 赛前集训前的总结(警醒)
  7. 计算机知识提炼,2017计算机考研:操作系统复习策略及重要知识点提炼
  8. OneNote打开其他账号的笔记共享
  9. Android源码目录结构详解
  10. js大于等于小于等于书写
  11. k短路(HDU6705)
  12. 幼儿园手工之自制时钟_幼儿园亲子手工之自制时钟玩教具,这样教孩子时间观念效果才明显...
  13. 华东理工大学matlab怎么下载,华东理工大学MATLAB.ppt
  14. 2033-人见人爱A+B(java)
  15. 神经网络多分类的实现总结
  16. Linux服务器搭建----Web服务器(apache)
  17. 动漫火影忍者佐助图片桌面壁纸
  18. TA-Lib金融量化库指标总结笔记
  19. 动态表头excel导出(java)
  20. ElementUI时间选择器

热门文章

  1. 抖音IP属地能改吗?抖音IP属地错误是什么原因?
  2. P1332 血色先锋队(BFS)
  3. 自动驾驶的自行车——GitHub 热点速览 v.21.24
  4. 如何做好新项目的需求调研?
  5. 网红茶饮亦难逃营销之困,喜茶们要怎么破局?
  6. Excel VBA“运行时错误40036应用程序定义或对象错误”。
  7. python画猪猪侠_猪猪侠简笔画怎么画?猪猪侠简笔画教程
  8. 价格压力来袭,小老板为什么扛不住?
  9. 2022-12-04 第 322 场周赛
  10. linux重启was控制台,was控制台打不开了 详细