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的更多相关文章

  1. 题解 CF1063B 【Labyrinth】

    题解 CF1063B [Labyrinth] 完了我发现我做CF的题大部分思路都和别人不一样qwq 这道题其实很水,不至于到紫题 我们只要bfs一下,向四个方向剪下枝,就A了(好像还跑的蛮快?) 是一 ...

  2. cf1063B Labyrinth (bfs)

    可以证明,如果我搜索的话,一个点最多只有两个最优状态:向左剩余步数最大时和向右剩余步数最大时 然后判一判,bfs就好了 dfs会T惨... #include<bits/stdc++.h> ...

  3. 2014 百度之星 题解 1004 Labyrinth

    Problem Description 度度熊是一仅仅喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能 ...

  4. CF1063B Labyrinth

    大家一起膜Rorshach. 一般的$bfs$会造成有一些点访问不到的情况,在$system\ test$的时候会$WA40$(比如我……). 发现这张地图其实是一个边权只有$0/1$的图,我们需要计 ...

  5. $CF1063B\ Labyrinth$ $01$最短路/$01BFS$

    \(Des\) 有一个网格图,上面的格子分为空地和障碍,障碍是不可以走的.现在从给定的起点出发开始到处乱走,最多可以往左走\(l\)次,往右走\(r\)次.求可能到达的点数. \(Sol\) 如果只限 ...

  6. 【极值问题】【CF1063B】 Labyrinth

    传送门 Description 给你一个\(n~\times~m\)的矩阵,一开始你在第\(r\)行第\(c\)列.你的上下移动不受限制,向左最多移动\(x\)次,向右最多移动\(y\)次.求你最多能 ...

  7. 2014百度之星资格赛 1004:Labyrinth(DP)

    Labyrinth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. [POJ1383]Labyrinth

    [POJ1383]Labyrinth 试题描述 The northern part of the Pyramid contains a very large and complicated labyr ...

  9. 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 ...

  10. poj 1383 Labyrinth【迷宫bfs+树的直径】

    Labyrinth Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 4004   Accepted: 1504 Descrip ...

随机推荐

  1. 2025私域运营工具攻略:9款AI+SCRM神器助你留存爆发

    私域流量的战火在2025年依旧熊熊燃烧.相比于烧钱获取公域流量,精细化运营私域用户成为越来越多企业的共识.但真正做得好的运营者都明白,留存和转化不是靠刷屏,而是靠体系和工具支撑. 这篇文章,我们将围绕 ...

  2. 使用 ftrace 跟踪内核丢包问题定位的实践

    本文分享自天翼云开发者社区<使用 ftrace 跟踪内核丢包问题定位的实践>,作者:f****n 数据包的丢失可能会导致性能下降或服务中断.为了诊断内核中是否有丢包问题,我们可以使用 ft ...

  3. VKProxy已提供命令行工具,镜像和简单的ui

    VKProxy 是使用c#开发的基于 Kestrel 实现 L4/L7的代理 经过6个月业余时间偶尔缝缝补补,已经达到能跑的地步了 (感兴趣的同学烦请点个github小赞赞呢) 相关使用写了一些简单的 ...

  4. axios+vue

    网络应用 Vue结合网络数据开发应用 axios+vue 他与本地应用的不同点是 data中的数据有一部分是从网络中获取到的 axios(网络请求库) 内部就是ajax 但是通过封装后用起来更加便捷 ...

  5. NOIP 2024 游寄

    别让我担心 派蒙可爱! 天气晴 风平浪静 沙滩上混乱的脚印 钓鱼竿 两份孤单 会飞的落汤鸡 是故事的开局 青橙紫绿 留影机塞满了回忆 可我却无比思念 遇见你的那一集 才发现我们早已 走了很远很远 多少 ...

  6. 为什么PostgreSQL不自动缓存执行计划?这可能是最硬核的优化解读

    为什么PostgreSQL不自动缓存执行计划?这可能是最硬核的优化解读 前言 在数据库性能方面,查询语句的执行计划是最关键的因素之一.每当数据库接收到一个查询时,它必须决定如何以最有效的方式执行该查询 ...

  7. CMD 命令启动管理员模式代码

    ::==========================================:: 获取管理员权限set _Args=%*if "%~1" NEQ "" ...

  8. java--xml约束、tomcat服务器

    xml约束 XML语法: 规范的xml文件的基本编写规则.(由w3c组织制定的) XML约束: 规范XML文件数据内容格式的编写规则.(由开发者自行定义) DTD约束 DTD约束:语法相对简单,功能也 ...

  9. CheckSum算法--又名累加和校验算法

    校验和(Checksum)是网络协议使用的数据错误检测方法,并且被认为比LRC(纵向冗余校验,Longitudinal Redundancy Check,LRC),VRC和CRC(循环冗余校验(Cyc ...

  10. paraview 导出表面网格

    简介 RT 步骤 如下所示 然后save data即可