发现在同一时间段中,滑动的方向具有唯一性,所以不难得出\(DP\)方程。

\(f_{i,j}=max(f_{i,j},f_{i-dx_,j-dy}+dis_{i,j,i-dx_,j-dy})\)

\((i,j)\)为坐标,\((i-dx_,j-dy)\)为可以转移到\((i,j)\)的合法坐标,\(dis\)为计算两个坐标之间移动的距离。

继续考虑滑动的方向具有唯一性这一特点,也就是钢琴只能在行上或列上滑动一个固定的区间范围,不难想到滑动窗口这一模型。于是采用单调队列优化\(DP\),每次只从队头转移,也就是每次都是从合法区间中选取了最优的状态转移过来。

时间复杂度为\(O(knm)\)。

其他细节处理就看代码吧。

\(code:\)

#include<bits/stdc++.h>
#define maxn 310
#define inf 200000000
using namespace std;
template<typename T> inline void read(T &x)
{
x=0;char c=getchar();bool flag=false;
while(!isdigit(c)){if(c=='-')flag=true;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
if(flag)x=-x;
}
int n,m,x,y,k,f,r,ans;
char w[maxn][maxn];
int dp[maxn][maxn],dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
struct que
{
int val,x,y;
}q[maxn];
int dis(int ax,int ay,int bx,int by)
{
return abs(ax-bx)+abs(ay-by);
}
void work(int x,int y,int len,int d)
{
f=1,r=0,d--;
while(1)
{
if(x<1||y<1||x>n||y>m) break;
if(w[x][y]=='x') f=1,r=0;
else
{
while(f<=r&&dp[x][y]>q[r].val+dis(x,y,q[r].x,q[r].y)) r--;
q[++r]=(que){dp[x][y],x,y};
while(f<=r&&(abs(x-q[f].x)>len||abs(y-q[f].y)>len)) f++;
dp[x][y]=max(dp[x][y],q[f].val+dis(x,y,q[f].x,q[f].y));
ans=max(ans,dp[x][y]);
}
x+=dx[d],y+=dy[d];
}
}
int main()
{
read(n),read(m),read(x),read(y),read(k);
for(int i=1;i<=n;++i) scanf("%s",w[i]+1);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
dp[i][j]=-inf;
dp[x][y]=0;
for(int i=1;i<=k;++i)
{
int s,t,l,d;
read(s),read(t),read(d),l=t-s+1;
if(d==1) for(int j=1;j<=m;++j) work(n,j,l,d);
if(d==2) for(int j=1;j<=m;++j) work(1,j,l,d);
if(d==3) for(int j=1;j<=n;++j) work(j,m,l,d);
if(d==4) for(int j=1;j<=n;++j) work(j,1,l,d);
}
printf("%d",ans);
return 0;
}

题解 洛谷 P2254 【[NOI2005]瑰丽华尔兹】的更多相关文章

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

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

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

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

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

    题目链接 luogu P2254 [NOI2005]瑰丽华尔兹 题解 为什么我我我不放放放bzoj的链接呢? 因为打的暴力啊,然后bzojT了呀QAQQQQQ(逃 然后luogu竟然过了呀呀呀 dp[ ...

  4. P2254 [NOI2005]瑰丽华尔兹

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

  5. 洛谷2254 BZOJ1499 瑰丽华尔兹题解

    洛谷链接 BZ链接 一个很容易想到的做法就是用f[i][j][t]表示t时刻在i,j处的可以滑动的最大值 f[i][j][t]=max(f[i][j][t-1],f[*i][*j][t-1]),这样大 ...

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

    题外话:题目极好,做题体验极差 题面:[NOI2005]瑰丽华尔兹 题解: F[t][i][j]表示第t时刻钢琴位于(i,j)时的最大路程F[t][i][j]=max(F[t-1][i][j],F[t ...

  7. 题解-[NOI2005]瑰丽华尔兹

    题解-[NOI2005]瑰丽华尔兹 [NOI2005]瑰丽华尔兹 \(n\times m\) 的矩阵.以 \((x,y)\) 为起点.一共 \(k\) 段时间,每段时间为 \([s_i,t_i](t_ ...

  8. NOI2005瑰丽华尔兹

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

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

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

随机推荐

  1. 009.OpenShift管理及监控

    一 资源限制 1.1 pod资源限制 pod可以包括资源请求和资源限制: 资源请求 用于调度,并控制pod不能在计算资源少于指定数量的情况下运行.调度程序试图找到一个具有足够计算资源的节点来满足pod ...

  2. ElasticSearch解决深度分页性能存在的问题使用scoll来解决

    现在我们全局搜索全部的数据,每次返回3条, 从 scroll 请求返回的结果反映了 search 发生时刻的索引状态,就像一个快照.后续的对文档的改动(索引.更新或者删除)都只会影响后面的搜索请求. ...

  3. 【面试篇】寒冬求职之你必须要懂的Web安全

    https://segmentfault.com/a/1190000019158228 随着互联网的发展,各种Web应用变得越来越复杂,满足了用户的各种需求的同时,各种网络安全问题也接踵而至.作为前端 ...

  4. 弹性盒模型中flex-grow 和flex的区别

    在flex弹性盒模型体系中,flex-grow和flex都有对子元素进行放大的作用,但是这两个属性在放大时的计算方法不同,在使用时候要注意,使用正确的放大属性,从而达到自己想要的效果. 先来看下两个属 ...

  5. MongoDB入门二

    MongoDB配置 本地启动 c:\MongoDB\bin>mongod.exe --dbpath "C:\\MongoDB\data\db" --logpath " ...

  6. 并发06--JAVA中的并发工具类

    1.等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. 使用join也可以完成这个操作,代码示例如下: package com.exam ...

  7. js进度条

    第一步//====================.wrap,.circle,.percent{                  position: absolute;                ...

  8. PAT A1003 Emergency 题解

    PAT A1003 Emergency PAT A1003 Emergency 题目简述: 原题为英文题目,所以在这里简述一下题意: 给定n个点和m条无向路以及起点.终点 下面一行n个数,第i个数表示 ...

  9. Spring Cloud Alibaba基础教程:Nacos 生产级版本 0.8.0

    昨晚Nacos社区发布了第一个生产级版本:0.8.0.由于该版本除了Bug修复之外,还提供了几个生产管理非常重要的特性,所以觉得还是有必要写一篇讲讲这次升级,在后续的文章中也都将以0.8.0版本为基础 ...

  10. CentOS 7 内核更新后删除旧内核(转载)

    CentOS 7 内核更新后删除旧内核 0.当前 # uname -sr Linux 3.10.0-123.20.1.el7.x86_64 1.搜索查询 # rpm -q kernel kernel- ...