[题解]CF1063B Labyrinth
CF1063B Labyrinth ~ Codeforces
数据范围较小,考虑使用搜索。
由于向左向右的步数限制过大,我们只能用\(x,y\)进行记忆化,否则空间和时间都过不去。
既然状态只有\(x,y\),我们就要让最优情况最先被遍历到,所以考虑BFS。
我们考虑,对于\((x,y)\)状态来说,什么样的情况是最优的?

显然,对于上图所示情况,中间的路径是最优的。
不难发现,从起点\((r,c)\)到终点\((x,y)\),“向右的步数\(-\)向左的步数”是固定值,也就是说,向右走得越多,向左也要走得越多,反之亦然。并不存在“通过多付出向右走的代价以减少向左走的代价”。所以我们可以认为,向左右走的总次数越少,该情况越不劣。
又因为每次操作花费只有\(0,1\)两种,所以任何时刻,队列中的操作总花费最多是\(2\)个相邻的整数。进而,我们可以采用0-1 BFS来求解,开一个双端队列,如果此次操作花费为\(1\)则放在队尾,否则放在队头,就可以保证每次从队头取出的都是最优的情况。
点击查看代码
#include<bits/stdc++.h>
#define N 2002
using namespace std;
struct Status{int x,y,l,r;};
int n,m,x,y,l,r,ans,dx[4]{-1,0,1,0},dy[4]{0,1,0,-1};
string s[N];
deque<Status> q;
bitset<N> vis[N];
signed main(){
cin>>n>>m>>x>>y>>l>>r;
for(int i=1;i<=n;i++) cin>>s[i],s[i]=' '+s[i];
q.push_back({x,y,l,r});
ans=vis[x][y]=1;
while(!q.empty()){
Status sta=q.front();
q.pop_front();
for(int i=0;i<4;i++){
int xx=sta.x+dx[i],yy=sta.y+dy[i],tl=sta.l,tr=sta.r;
if(dy[i]==1) tr--; else if(dy[i]==-1) tl--;
if(xx<1||yy<1||xx>n||yy>m||s[xx][yy]=='*'||vis[xx][yy]||tl<0||tr<0) continue;
vis[xx][yy]=1,ans++;
if(i==1) q.push_back({xx,yy,sta.l,sta.r-1});
else if(i==3) q.push_back({xx,yy,sta.l-1,sta.r});
else q.push_front({xx,yy,sta.l,sta.r});
}
}
cout<<ans<<"\n";
return 0;
}
[题解]CF1063B Labyrinth的更多相关文章
- 题解 CF1063B 【Labyrinth】
题解 CF1063B [Labyrinth] 完了我发现我做CF的题大部分思路都和别人不一样qwq 这道题其实很水,不至于到紫题 我们只要bfs一下,向四个方向剪下枝,就A了(好像还跑的蛮快?) 是一 ...
- cf1063B Labyrinth (bfs)
可以证明,如果我搜索的话,一个点最多只有两个最优状态:向左剩余步数最大时和向右剩余步数最大时 然后判一判,bfs就好了 dfs会T惨... #include<bits/stdc++.h> ...
- 2014 百度之星 题解 1004 Labyrinth
Problem Description 度度熊是一仅仅喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能 ...
- CF1063B Labyrinth
大家一起膜Rorshach. 一般的$bfs$会造成有一些点访问不到的情况,在$system\ test$的时候会$WA40$(比如我……). 发现这张地图其实是一个边权只有$0/1$的图,我们需要计 ...
- $CF1063B\ Labyrinth$ $01$最短路/$01BFS$
\(Des\) 有一个网格图,上面的格子分为空地和障碍,障碍是不可以走的.现在从给定的起点出发开始到处乱走,最多可以往左走\(l\)次,往右走\(r\)次.求可能到达的点数. \(Sol\) 如果只限 ...
- 【极值问题】【CF1063B】 Labyrinth
传送门 Description 给你一个\(n~\times~m\)的矩阵,一开始你在第\(r\)行第\(c\)列.你的上下移动不受限制,向左最多移动\(x\)次,向右最多移动\(y\)次.求你最多能 ...
- 2014百度之星资格赛 1004:Labyrinth(DP)
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- [POJ1383]Labyrinth
[POJ1383]Labyrinth 试题描述 The northern part of the Pyramid contains a very large and complicated labyr ...
- Codeforces Educational Codeforces Round 5 C. The Labyrinth 带权并查集
C. The Labyrinth 题目连接: http://www.codeforces.com/contest/616/problem/C Description You are given a r ...
- poj 1383 Labyrinth【迷宫bfs+树的直径】
Labyrinth Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 4004 Accepted: 1504 Descrip ...
随机推荐
- 2025私域运营工具攻略:9款AI+SCRM神器助你留存爆发
私域流量的战火在2025年依旧熊熊燃烧.相比于烧钱获取公域流量,精细化运营私域用户成为越来越多企业的共识.但真正做得好的运营者都明白,留存和转化不是靠刷屏,而是靠体系和工具支撑. 这篇文章,我们将围绕 ...
- 使用 ftrace 跟踪内核丢包问题定位的实践
本文分享自天翼云开发者社区<使用 ftrace 跟踪内核丢包问题定位的实践>,作者:f****n 数据包的丢失可能会导致性能下降或服务中断.为了诊断内核中是否有丢包问题,我们可以使用 ft ...
- VKProxy已提供命令行工具,镜像和简单的ui
VKProxy 是使用c#开发的基于 Kestrel 实现 L4/L7的代理 经过6个月业余时间偶尔缝缝补补,已经达到能跑的地步了 (感兴趣的同学烦请点个github小赞赞呢) 相关使用写了一些简单的 ...
- axios+vue
网络应用 Vue结合网络数据开发应用 axios+vue 他与本地应用的不同点是 data中的数据有一部分是从网络中获取到的 axios(网络请求库) 内部就是ajax 但是通过封装后用起来更加便捷 ...
- NOIP 2024 游寄
别让我担心 派蒙可爱! 天气晴 风平浪静 沙滩上混乱的脚印 钓鱼竿 两份孤单 会飞的落汤鸡 是故事的开局 青橙紫绿 留影机塞满了回忆 可我却无比思念 遇见你的那一集 才发现我们早已 走了很远很远 多少 ...
- 为什么PostgreSQL不自动缓存执行计划?这可能是最硬核的优化解读
为什么PostgreSQL不自动缓存执行计划?这可能是最硬核的优化解读 前言 在数据库性能方面,查询语句的执行计划是最关键的因素之一.每当数据库接收到一个查询时,它必须决定如何以最有效的方式执行该查询 ...
- CMD 命令启动管理员模式代码
::==========================================:: 获取管理员权限set _Args=%*if "%~1" NEQ "" ...
- java--xml约束、tomcat服务器
xml约束 XML语法: 规范的xml文件的基本编写规则.(由w3c组织制定的) XML约束: 规范XML文件数据内容格式的编写规则.(由开发者自行定义) DTD约束 DTD约束:语法相对简单,功能也 ...
- CheckSum算法--又名累加和校验算法
校验和(Checksum)是网络协议使用的数据错误检测方法,并且被认为比LRC(纵向冗余校验,Longitudinal Redundancy Check,LRC),VRC和CRC(循环冗余校验(Cyc ...
- paraview 导出表面网格
简介 RT 步骤 如下所示 然后save data即可