传送门

题解

大概就是设$dp[i][x][y]$表示在第$i$个时间段,在$(x,y)$时的最大滑动距离

然后转移是$dp[i][x][y]=max(dp[i-1][x][y],dp[i][x'][y']+dis(x,y,x',y'))$

然后用单调队列进行优化,遇到障碍清除整个单调队列

 //minamoto
#include<cstdio>
#include<cstring>
const int N=;
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
int n,m,sx,sy,k,ans,dp[N][N];
int dx[]={,-,,,},dy[]={,,,-,};
struct node{
int dp,pos;
node(int dd=,int pp=){dp=dd,pos=pp;}
}q[N];
char mp[N][N];
void solve(int x,int y,int len,int d){
int h=,t=;
for(int i=;x>=&&x<=n&&y>=&&y<=m;++i,x+=dx[d],y+=dy[d])
if(mp[x][y]=='x') h=,t=;
else{
while(h<=t&&q[t].dp+i-q[t].pos<dp[x][y]) --t;
q[++t]=node(dp[x][y],i);
if(q[t].pos-q[h].pos>len) ++h;
dp[x][y]=q[h].dp+i-q[h].pos;
cmax(ans,dp[x][y]);
}
}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d%d%d%d%d",&n,&m,&sx,&sy,&k);
for(int i=;i<=n;++i) scanf("%s",mp[i]+);
memset(dp,0xef,sizeof(dp));
dp[sx][sy]=;
while(k--){
int s,t,d;scanf("%d%d%d",&s,&t,&d);
int len=t-s+;
switch(d){
case :for(int i=;i<=m;++i) solve(n,i,len,d);break;
case :for(int i=;i<=m;++i) solve(,i,len,d);break;
case :for(int i=;i<=n;++i) solve(i,m,len,d);break;
case :for(int i=;i<=n;++i) solve(i,,len,d);break;
}
}
printf("%d\n",ans);
return ;
}

洛谷P2254 [NOI2005]瑰丽华尔兹(单调队列)的更多相关文章

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

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

  2. BZOJ 1499 [NOI2005] 瑰丽华尔兹 | 单调队列优化DP

    BZOJ 1499 瑰丽华尔兹 | 单调队列优化DP 题意 有一块\(n \times m\)的矩形地面,上面有一些障碍(用'#'表示),其余的是空地(用'.'表示).每时每刻,地面都会向某个方向倾斜 ...

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

    1499: [NOI2005]瑰丽华尔兹 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 1802  Solved: 1097[Submit][Status ...

  4. 【BZOJ1499】[NOI2005]瑰丽华尔兹 单调队列+DP

    [BZOJ1499][NOI2005]瑰丽华尔兹 Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是 ...

  5. BZOJ 1499 NOI2005 瑰丽华尔兹 单调队列

    题目大意:给定一个m*n的地图,一些点有障碍物,钢琴初始在一个点,每一个时间段能够选择向给定的方向移动一段距离,求最长路径长 朴素DP的话,我们有T个时间段,每一个时间段有m*n个点,n个时间,一定会 ...

  6. bzoj 1499 [NOI2005]瑰丽华尔兹——单调队列优化dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1499 简单的单调队列优化dp.(然而当时却WA得不行.今天总算填了坑) 注意滚动数组赋初值应 ...

  7. bzoj1499 [NOI2005]瑰丽华尔兹——单调队列优化DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1499 朴素DP方程很好想,以右移为例,就是 f[i][x][y]=max(f[i][x][y ...

  8. P2254 [NOI2005]瑰丽华尔兹

    链接P2254 [NOI2005]瑰丽华尔兹 首先有个很朴素的\(dp\),设\(f_{i,j,k}\)表示\(k\)时刻地点\(i,j\)的最长长度. 然后这样不能优化,考虑利用一段连续时间是同一个 ...

  9. 【BZOJ】4721: [Noip2016]蚯蚓 / 【洛谷】P2827 蚯蚓(单调队列)

    Description 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮 ...

随机推荐

  1. linux日志服务器审计客户端history记录

    https://blog.csdn.net/yanggd1987/article/details/70255179

  2. 【SDCC讲师专访】PingCAP联合创始人兼CEO刘奇:好的产品应开源,不闭门造车-CSDN.NET

    [SDCC讲师专访]PingCAP联合创始人兼CEO刘奇:好的产品应开源,不闭门造车-CSDN.NET 小米的Themis

  3. 火狐firefox、谷歌chrome等浏览器扩展、插件介绍

    火狐旧的插件扩展已经不可用,需要更新,这是本人安装的最新的插件 chrome插件 https://www.zhihu.com/question/68338297

  4. 报错** is not accessible due to restriction on required library

    报错: Description Resource Path Location TypeAccess restriction: The type Map<String,Object> is ...

  5. 让你的 EditText 所有清除

    原文地址:让你的 EditText 所有清除 參考原文:Giving your Edit Texts the All Clear 项目地址(欢迎 Star):ClearEditText 在输入文本的时 ...

  6. 【LeetCode-面试算法经典-Java实现】【066-Plus One(加一)】

    [066-Plus One(加一)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a non-negative number represented as ...

  7. Python第五讲

    一.冒泡算法 1.将两个变量的值互换 a1 = 123 a2 = 456 #要想将a1与a2的值进行位置互换需要借助一个中间变量(temp) temp = a1#将a1的值赋值给temp(temp=1 ...

  8. 【Mongodb教程 第十七课 】MongoDB常用命令 数据库命令 集合操作命令

    (1)数据库命令 a)添加用户 db.addUser(‘name’,’pwd’) b)删除用户 db.removeUser(‘name’) c)用户验证 db.auth(‘name’,’pwd’) d ...

  9. Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作

    Visual Studio 2017中使用正则修改部分内容   最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...

  10. oracle 正则查询json返回报文中某个字段的值

    接口返回报文为json 格式,如下: {"body":{"businessinfo":{"c1rate":"25.00" ...