1499: [NOI2005]瑰丽华尔兹

Time Limit: 3 Sec  Memory Limit: 64 MB
Submit: 1786  Solved: 1089
[Submit][Status][Discuss]

Description

你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐。但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在大海上,他的名字叫丹尼•布德曼•T.D.•柠檬•1900,朋友们都叫他1900。 1900在20世纪的第一年出生在往返于欧美的邮轮弗吉尼亚号上,很不幸他刚出生就被抛弃了,成了孤儿。1900孤独的成长在弗吉尼亚号上,从未离开过这个摇晃的世界。也许是对他命运的补偿,上帝派可爱的小天使艾米丽照顾他。可能是天使的点化,1900拥有不可思议的钢琴天赋:从未有人教,从没看过乐谱,但他却能凭着自己的感觉弹出最沁人心脾的旋律。当1900的音乐获得邮轮上所有人的欢迎时,他才8岁,而此时的他已经乘着海轮往返欧美大陆50余次了。虽说是钢琴奇才,但1900还是个孩子,他有着和一般男孩一样的好奇和调皮,只不过更多一层浪漫的色彩罢了:这是一个风雨交加的夜晚,海风卷起层层巨浪拍打着弗吉尼亚号,邮轮随着巨浪剧烈的摇摆。船上的新萨克斯手马克斯•托尼晕船了,1900招呼托尼和他一起坐上舞厅里的钢琴,然后松开了固定钢琴的闸,于是,钢琴随着海轮的倾斜滑动起来。准确的说,我们的主角1900、钢琴、邮轮随着1900的旋律一起跳起了华尔兹,随着“嘣嚓嚓”的节奏,托尼的晕船症也奇迹般的消失了。后来托尼在回忆录上写道:大海摇晃着我们使我们转来转去快速的掠过灯和家具我意识到我们正在和大海一起跳舞真是完美而疯狂的舞者晚上在金色的地板上快乐的跳着华尔兹是不是很惬意呢?也许,我们忘记了一个人,那就是艾米丽,她可没闲着:她必须在适当的时候施展魔法帮助1900,不让钢琴碰上舞厅里的家具。不妨认为舞厅是一个N行M列的矩阵,矩阵中的某些方格上堆放了一些家具,其他的则是空地。钢琴可以在空地上滑动,但不能撞上家具或滑出舞厅,否则会损坏钢琴和家具,引来难缠的船长。每个时刻,钢琴都会随着船体倾斜的方向向相邻的方格滑动一格,相邻的方格可以是向东、向西、向南或向北的。而艾米丽可以选择施魔法或不施魔法:如果不施魔法,则钢琴会滑动;如果施魔法,则钢琴会原地不动。艾米丽是个天使,她知道每段时间的船体的倾斜情况。她想使钢琴在舞厅里滑行路程尽量长,这样1900会非常高兴,同时也有利于治疗托尼的晕船。但艾米丽还太小,不会算,所以希望你能帮助她。

Input

输入文件的第一行包含5个数N, M, x, y和K。N和M描述舞厅的大小,x和y为钢琴的初始位置(x行y列);我们对船体倾斜情况是按时间的区间来描述的,且从1开始计量时间,比如“在[1, 3]时间里向东倾斜,[4, 5]时间里向北倾斜”,因此这里的K表示区间的数目。以下N行,每行M个字符,描述舞厅里的家具。第i行第j列的字符若为‘ . ’,则表示该位置是空地;若为‘ x ’,则表示有家具。以下K行,顺序描述K个时间区间,格式为:si ti di。表示在时间区间[si, ti]内,船体都是向di方向倾斜的。di为1, 2, 3, 4中的一个,依次表示北、南、西、东(分别对应矩阵中的上、下、左、右)。输入保证区间是连续的,即 s1 = 1 si = ti-1 + 1 (1 < i ≤ K) tK = T

Output

输出文件仅有1行,包含一个整数,表示钢琴滑行的最长距离(即格子数)。

Sample Input

4 5 4 1 3
..xx.
.....
...x.
.....
1 3 4
4 5 1
6 7 3

Sample Output

6

HINT

令f[k][i][j]表示第k阶段后在i,j出所走的最大距离

直接转移的复杂度是n^2,我们发现可以用斜率优化去把复杂度降到n

这样的话n^3的复杂度就可以解决了

#include <bits/stdc++.h>
#define ll long long
#define inf 1000000
using namespace std;
inline int read(){int x=0;int f=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}return x*f;
}
const int MAXN=210;
const int dx[5]={0,-1,1,0,0};
const int dy[5]={0,0,0,-1,1};
int f[MAXN][MAXN][MAXN],m,n,ans,pos[MAXN],q[MAXN<<1],head,tail,now,k;
char ch[MAXN][MAXN];
inline void push(int val,int now){if(val==-inf) return;while(tail>=head&&val-now>q[tail]) tail--;q[++tail]=val-now;pos[tail]=now;
}
inline void dp(int k,int x,int y,int d,int T){head=1,tail=0,now=1;while(x>=1&&y>=1&&x<=n&&y<=m){if(ch[x][y]=='x') head=1,tail=0;else push(f[k-1][x][y],now);while(head<=tail&&now-pos[head]>T) head++;if(head<=tail){f[k][x][y]=q[head]+now;}else f[k][x][y]=-inf;ans=max(ans,f[k][x][y]);x+=dx[d];y+=dy[d];now++;}
}
int main(){n=read();m=read();int sx=read();int sy=read();k=read();for(int i=1;i<=n;i++){scanf("%s",ch[i]+1);}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){f[0][i][j]=-inf;}}f[0][sx][sy]=0;for(int i=1;i<=k;i++){int x=read();int y=read();int d=read();if(d==1) for(int j=1;j<=m;j++) dp(i,n,j,d,y-x+1);if(d==2) for(int j=1;j<=m;j++) dp(i,1,j,d,y-x+1);if(d==3) for(int j=1;j<=n;j++) dp(i,j,m,d,y-x+1);if(d==4) for(int j=1;j<=n;j++) dp(i,j,1,d,y-x+1);}cout<<ans<<endl;return 0;
}

  

转载于:https://www.cnblogs.com/something-for-nothing/p/8017261.html

BZOJ 1499 NOI2005 瑰丽的华尔兹相关推荐

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

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

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

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

  3. [NOI2005] 瑰丽华尔兹

    [NOI2005] 瑰丽华尔兹 \[ \mathfrak{<<The Crave>>} \] 题目大意:\(N\times M\)的矩阵,\(T\)个时间段,某个特定的时间段可 ...

  4. P2254 [NOI2005]瑰丽华尔兹

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

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

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

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

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

  7. [NOI2005]瑰丽华尔兹

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

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

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

  9. bzoj1499 [NOI2005]瑰丽华尔兹

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

最新文章

  1. mysql 5.7.15 安装_mysql 5.7.15 安装配置方法图文教程
  2. Hibernate占位符问题[use named parameters or JPA-style positional parameters instead.]
  3. oracle分区交换有啥好处,分区交换的速度为什么快?
  4. .NET使用免费开源类库操作Excel
  5. 工作374-前端margin:0 auto为什么会失效
  6. java mapreduce教程_Java搭建MapReduce完成二次排序步骤
  7. 爬虫怎么处理python_python 爬虫怎么处理json内容
  8. Android开发笔记(十五)淡入淡出动画TransitionDrawable
  9. docker镜像启动后端口号是多少_初识Docker
  10. apache2.2后修改最大并发连接数
  11. 每日算法系列【LeetCode 330】按要求补齐数组
  12. php读取带分隔符的txt文件,Pandas中文手册
  13. 构造器模式(Builder模式)
  14. kmp算法题全套svp版
  15. win10应用商店打不开_为何win10应用商店不能下载itunes
  16. Linux系统的PAM模块认证文件含义说明总结
  17. gossiping路由协议仿真
  18. jbe 可以用来修改Java class的字节码,配合jd-gui 使用
  19. 520表白网站(附源码与修改教程)
  20. 微信支付接口的参数规定

热门文章

  1. [Windows Server 2012] MySQL移机方法
  2. 面试官_vue的这些原理你了解吗_
  3. 常见的几种开源镜像仓库介绍
  4. 质量意识培训案例之二(共六个)“扁鹊论医”
  5. intecad服务器位置,InteCAD for AutoCAD
  6. 【TgM阅读笔记】《微信小程序开发——从入门到实战》(陈云贵、高旭)
  7. “求职路”上英语口语面试问答大全收藏
  8. HP MC service-guard 完全攻略
  9. 建筑施工员证怎么考?报名条件及报考时间是什么?
  10. swiper异形轮播