题链:

单调队列优化DP
定义 dp[t][x][y] 表示第t个时间段之后,处在(x,y)位置所滑过的最长距离。
显然 dp[t][x][y] 的来源就是 dp[t-1][x'][y'],表示由(x',y')这个点滑过来的。
 
所以枚举t,x,y 以及滑行距离(以便得到(x',y')位置)进行DP,复杂度为kN³
 
然后考虑优化,
对于某个方向的滑行,不需要每次都重新枚举滑行距离,
可以用一个单调队列维护该点(x,y)的最优转移来源,然后O(1)转移,
时间优化到 kN²
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 205
using namespace std;
const int mv[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
char MP[MAXN][MAXN];
int dp[2][MAXN][MAXN];
int N,M,X,Y,K,cur,ANS;
int dis(int x,int y){
if(x<y) swap(x,y);
return x-y;
}
void transfer(int x,int y,int k,int d){
static int val[MAXN],px[MAXN],py[MAXN],l,r;
l=1; r=0;
for(int i=1,now;1<=x&&x<=N&&1<=y&&y<=M;x+=mv[k][0],y+=mv[k][1],i++){
if(MP[x][y]=='x'){
while(l<=r) l++;
dp[cur][x][y]=0;
}
else{
now=dp[cur^1][x][y]-i;
while(l<=r&&val[r]<=now) r--;
r++; val[r]=now; px[r]=x; py[r]=y;
while(l<=r&&(dis(x,px[l])>d||dis(y,py[l])>d)) l++;
dp[cur][x][y]=dp[cur^1][px[l]][py[l]]+dis(x,px[l])+dis(y,py[l]);
}
}
}
int main(){
freopen("/home/noilinux/Documents/模块学习/DP优化/1499.in","r",stdin);
scanf("%d%d%d%d%d",&N,&M,&X,&Y,&K);
memset(dp[cur],0xc0,sizeof(dp[cur]));
dp[cur][X][Y]=0;
for(int i=1;i<=N;i++) scanf("%s",MP[i]+1);
for(int k=1,s,t,d;k<=K;k++){
cur^=1;
scanf("%d%d%d",&s,&t,&d);
if(d==1) for(int j=1;j<=M;j++) transfer(N,j,0,t-s+1);
if(d==2) for(int j=1;j<=M;j++) transfer(1,j,1,t-s+1);
if(d==3) for(int i=1;i<=N;i++) transfer(i,M,2,t-s+1);
if(d==4) for(int i=1;i<=N;i++)
transfer(i,1,3,t-s+1);
}
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
ANS=max(ANS,dp[cur][i][j]);
printf("%d\n",ANS);
return 0;
}

  

●BZOJ 1499 [NOI2005]瑰丽华尔兹的更多相关文章

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

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

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

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

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

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

  4. bzoj 1499: [NOI2005]瑰丽华尔兹【dp+单调队列】

    设f[a][i][j]为第a段时间结束时在(i,j)位置的最长滑行距离,转移很好想,就是分四个方向讨论,然后枚举这段时间的滑行长度取个max即可 但是这样是O(n^4)的,考虑优化 发现同一行或列,取 ...

  5. NOI2005瑰丽华尔兹

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

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

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

  7. [Bzoj1499][NOI2005]瑰丽华尔兹[简单DP]

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

  8. 单调队列优化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 ...

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

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

随机推荐

  1. 201621123040《Java程序设计》第八周学习总结

    1.本周学习总结 2.书面作业 2.1ArrayList代码分析 2.1.1解释ArrayList的contains源代码 ArrayList.contain()方法通过调用indexOf()来判断元 ...

  2. verilog学习笔记(4)_有限状态机

    有限状态机: 有限状态机是由寄存器组和组合逻辑构成的硬件时序电路: - 其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态: - 究竟转 ...

  3. iOS 简易无限滚动的图片轮播器-SDCycleScrollView

    @interface ViewController () <</span>SDCycleScrollViewDelegate> @end @implementation Vie ...

  4. 《高级软件测试》JIRA使用手册(一)JIRA基本情况

    JIRA 官方网站为:https://www.atlassian.com/software/jira 中文代理网站为:https://www.jira.cn 现版本:v7.3.0 Atlassian公 ...

  5. Packet for query is too large (84 > -1).

    windows下的resin配置连接mysql,常用的安全的做法是将数据库信息配置到conf目录下的resin.xml文件中. 因为resin连接mysql不是必须的,所以resin本身没有提供mys ...

  6. 自制 h5 音乐播放器 可搜索

    闲言碎语: 有好几天没有发表博客了,这也是因为一直开发音乐和完善我的博客项目,好不容易抽出时间总结一下这几天所做的东西,笔试又不断通知,实则匆忙 今天难得逃了一次课,就趁这时间,该写写就写写吧~~ 进 ...

  7. 消除ExtJS6的extjs-trila字样

  8. JAVA_SE基础——63.String类的常用方法

    获取方法int length()  获取字符串的长度char charAt(int index) 获取特定位置的字符 (角标越界)int indexOf(String str) 查找子串第一次出现的索 ...

  9. Nginx配置小结

    前两天区听了一堂Nginx的课,然后翻了一下自己之前的Nginx的笔记,做了一个简单的小结. 全局变量 $args : 这个变量等于请求行中的参数,同$query_string $content_le ...

  10. phalcon框架命名空间

    命名空间第一影像就是实际上就相当宏定义,就是需要把一个很长的带有路径的类文件指定一个空间,然后就可直接用简单简写模式 当然如果是外部文件需要首先引入外部文件,如果不引入外部文件还是会报错.一般最会出错 ...