bzoj1499: [NOI2005]瑰丽华尔兹
dp.
首先我们可以看到每个时间段只能往一个方向转移最多t步(t为时间段的长度),所以我们可以按时间段dp。因为这个前后值互不影响,也不用占用这一维空间就可以省去。
然后每个时间段内是一列一列(行) 进行递推。 如果朴素枚举是O(n^2)时间无法承受。所以每列(行)用一个单调队列维护dp,队首放着移动距离最大可以到达的点,这样复杂度就降到了O(n)。每次要递推n列(行)。所以总复杂度为O(k*n^2)。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define ans first
#define pos second
const int maxn = 200 + 10;
const int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
pair<int,int> q[maxn],tmp;
int f[maxn][maxn];
char g[maxn][maxn];
int n,m,k,x,y,l,r,res; inline bool inrange(int x,int y) {
return x>=1 && x<=n && y>=1 && y<=m;
} void solve(int x,int y,int d,int len) {
l=r=0;
for(int i=0;inrange(x,y);i++,x+=dx[d],y+=dy[d]) {
if(g[x][y]=='x') l=r=0;
else {
tmp.ans=f[x][y]; tmp.pos=i;
while(l<r && q[r-1].ans+(i-q[r-1].pos)<=tmp.ans) r--;
q[r++]=tmp;
while(l<r && (i-q[l].pos)>len) l++;
f[x][y]=q[l].ans+(i-q[l].pos);
res=max(res,f[x][y]);
}
}
} int main() {
scanf("%d%d%d%d%d",&n,&m,&x,&y,&k);
for(int i=1;i<=n;i++) scanf("%s",g[i]+1); memset(f,0x80,sizeof(f)); f[x][y]=0;
for(int i=1,s,e,d,len;i<=k;i++) {
scanf("%d%d%d",&s,&e,&d),len=e-s+1;
if(d==1) for(int j=1;j<=m;j++) solve(n,j,0,len);
else if(d==2) for(int j=1;j<=m;j++) solve(1,j,1,len);
else if(d==3) for(int j=1;j<=n;j++) solve(j,m,2,len);
else for(int j=1;j<=n;j++) solve(j,1,3,len);
}
printf("%d\n",res);
return 0;
}
bzoj1499: [NOI2005]瑰丽华尔兹的更多相关文章
- bzoj1499[NOI2005]瑰丽华尔兹 单调队列优化dp
1499: [NOI2005]瑰丽华尔兹 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 1802 Solved: 1097[Submit][Status ...
- [Bzoj1499][NOI2005]瑰丽华尔兹[简单DP]
1499: [NOI2005]瑰丽华尔兹 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 1714 Solved: 1042[Submit][Status ...
- BZOJ1499:[NOI2005]瑰丽华尔兹(DP,单调队列)
Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在 ...
- BZOJ1499 [NOI2005]瑰丽华尔兹 【单调队列优化dp】
题目 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在大海上,他的名字叫 ...
- BZOJ1499: [NOI2005]瑰丽华尔兹(dp)
Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在 ...
- bzoj千题计划216:bzoj1499: [NOI2005]瑰丽华尔兹
http://www.lydsy.com/JudgeOnline/problem.php?id=1499 预处理从每个位置向每个方向最多能走几步 dp[k][i][j] 第k个时间段后,钢琴到位置(i ...
- 2018.09.10 bzoj1499: [NOI2005]瑰丽华尔兹(单调队列优化dp)
传送门 单调队列优化dp好题. 这题其实很简单. 我们很容易想到一个O(T∗n∗m)" role="presentation" style="position: ...
- bzoj1499: [NOI2005]瑰丽华尔兹&&codevs1748 单调队列优化dp
这道题 网上题解还是很多很好的 强烈推荐黄学长 码风真的好看 神犇传送门 学习学习 算是道单调队列优化dp的裸题吧 #include<cstdio> #include<cstring ...
- bzoj1499 [NOI2005]瑰丽华尔兹——单调队列优化DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1499 朴素DP方程很好想,以右移为例,就是 f[i][x][y]=max(f[i][x][y ...
随机推荐
- Http之Get/Post请求区别
Http之Get/Post请求区别 1.HTTP请求格式: <request line> <headers> <blank line> [<request-b ...
- iOS$299企业账号In House ipa发布流程
1.在Mac系统中进入“钥匙串访问”,选择“钥匙串访问”-“证书助理”-“从证书颁发机构请求证书”. 填写前两项,并保存在本地. 2.登录https://developer.apple.com,进入i ...
- vim分屏快捷键使用/增大/减小字体使用
问题描述: vim分屏快捷键使用 问题解决: (1)vim 分屏快捷键 (2)vim高度改变 (3)vim中增加和减少字体大小 使用快捷键Ctr ...
- uva 11181
直接枚举计算就行: #include<cstdio> #include<cstring> #include<algorithm> #define maxn 22 u ...
- uva 1368
简单的贪心 ~ #include <cstdio> #include <cstdlib> #include <cmath> #include <map> ...
- hdu 1242 Rescue(BFS,优先队列,基础)
题目 /******************以下思路来自百度菜鸟的程序人生*********************/ bfs即可,可能有多个’r’,而’a’只有一个,从’a’开始搜,找到的第一个’r ...
- REST_FRAMEWORK加深记忆-第二次练习官方文档
我想,其它几个基于PYTHON的REST API模块概念都差不多吧. 先深入搞定这个吧. 前几次练习完了有一些印象,并且在工作中实践过一个,现在多弄几次,玩熟悉点. Serializers.py __ ...
- hdu 3595 GG and MM 博弈论
同时进行,必须操作这就是Every-SG的特点 同样在贾志豪的论文中有提到这种游戏:组合游戏略述——浅谈SG游戏的若干拓展及变形 其中这个游戏特点不仅有必胜和必败,而且有时间长短的博弈,对于自己必胜的 ...
- hdu 4412 Sky Soldiers DP
动态规划,主要是用单调性求区间的最小期望. 代码如下: #include<iostream> #include<stdio.h> #include<algorithm&g ...
- JavaC 编译目录下所有的UTF-8编码的java文件
javac -encoding UTF-8 *.java