题链:

单调队列优化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. Beta冲刺NO.1

    Beta冲刺 第一天 1. 昨天的困难 由于今天还是第一天,所以暂时没有昨天的困难. 2. 今天解决的进度 潘伟靖: 对代码进行了review 1.将某些硬编码改为软编码 2.合并了一些方法,简化代码 ...

  2. Python web服务器

    Python 配置wsgi接口# 引入Python wsgi包 from wsgiref.simple_server import make_server # 撰写服务器端程序代码 def Appli ...

  3. Flask 扩展 HTTP认证

    Restful API不保存状态,无法依赖Cookie及Session来保存用户信息,自然也无法使用Flask-Login扩展来实现用户认证.所以这里,我们就要介绍另一个扩展,Flask-HTTPAu ...

  4. show engine innodb status输出说明

    参考链接 (https://dev.mysql.com/doc/refman/5.7/en/innodb-standard-monitor.html) 其中有这样一句: For a descripti ...

  5. python/零起点(一、字符串)

    python/零起点(一.字符串) 字符串(str) 字符串是可迭代的 str()强制转成字符串类型 字符串是有序的,且不可变的数据类型. 字符串转换整型的案例: 1 name=['guobaoyua ...

  6. oracle12c:通过oracle客户端工具配置tns,并使用sqlldr进行批量导入数据

    通过oracle客户端工具配置tns: 进入oracle配置工具“Net Configuration Assistant”-> 点击“下一步”,完成tns配置. 测试是否tns可用 命令:tns ...

  7. POJ-2570 Fiber Network---Floyd+二进制表示集合

    题目链接: https://vjudge.net/problem/POJ-2570 题目大意: 一些公司决定搭建一个更快的网络,称为"光纤网".他们已经在全世界建立了许多站点,这 ...

  8. [转]pymongo常用操作函数

    pymongo 是 mongodb 的 python Driver Editor.记录下学习过程中感觉以后会常用多一些部分,以做参考. 1. 连接数据库 要使用pymongo最先应该做的事就是先连上运 ...

  9. SQL知识点

    关系型数据库:MySql非关系型数据库:Redis(以键值对的方式) SQL分几类: DDL:数据定义语言:create.alter.drop.truncate DML:数据操作语言:insert.d ...

  10. vue+iview实现动态路由和权限验证

    github上关于vue动态添加路由的例子很多,本项目参考了部分项目后,在iview框架基础上完成了动态路由的动态添加和菜单刷新.为了帮助其他需要的朋友,现分享出实现逻辑,欢迎一起交流学习. Gith ...