cf1064D. Labyrinth(01BFS)
题意
给出一个\(n \times m\)的网格,给出起始点,要求向左走不超过\(L\)步,向右走不超过\(R\)步,求出能遍历到哪些点
Sol
一个很直观的想法,BFS的时候状态里记录下还能向左 / 右走多少步,然后xjbBFS,恭喜你fst了。。
正解非常的巧妙:
可以这样想:如果我们保证了到达一个点时向左走的次数最少,那么是不是也可以保证向右走的次数最少呢?
答案是肯定的,因为向右走了一次之后肯定需要向左走一次来抵消掉这次操作
向右同理
把向左/右的边权看成1,向上/下的边权看成0,一波SPFA01BFS
#include<bits/stdc++.h>
const int MAXN = 2001;
int N, M, r, c, X, Y, vis[MAXN][MAXN], ans, xx[4] = {-1, +1, 0, 0}, yy[4] = {0, 0, -1, +1};
char s[MAXN][MAXN];
struct Node {
int x, y, l, r;
};
main() {
std::cin >> N >> M >> r >> c >> X >> Y;
for(int i = 1; i <= N; i++) scanf("%s", s[i] + 1);
std::deque<Node> q; q.push_back((Node) {r, c, X, Y});
while(!q.empty()) {
Node p; p = q.front(); q.pop_front();
if(vis[p.x][p.y] || (p.l < 0) || (p.r < 0)) continue;
vis[p.x][p.y] = 1; ans++;
for(int i = 0; i < 4; i++) {
int wx = p.x + xx[i], wy = p.y + yy[i];
if(wx < 1 || wx > N || wy < 1 || wy > M || (s[wx][wy] == '*') || (vis[wx][wy])) continue;
if(i == 0 || i == 1) {q.push_front((Node) {wx, wy, p.l, p.r}); continue;}
if(i == 2) {q.push_back((Node) {wx, wy, p.l - 1, p.r}); continue;}
if(i == 3) q.push_back((Node) {wx, wy, p.l, p.r - 1});
}
}
printf("%d", ans);
}
cf1064D. Labyrinth(01BFS)的更多相关文章
- CF D. Labyrinth 01BFS
由于上下走不限制,所以按照贪心,我们应该尽可能走上下方向. 我们可以开一个双端队列,并认为每次提取队首的时候得到的是到达该点的最优策略.(这个一定是唯一的,因为不可能向右走几格,然后再退回去. ) 那 ...
- NOIP前刷题记录
因为本蒻实在太蒻了...对于即将到来的NOIP2018ssfd,所以下决心要把自己近期做过的题目(衡量标准为洛谷蓝题难度或以上)整理一下,归归类,简单地写一下思路,就当作自己复习了吧qwq 本随笔持续 ...
- NOIP刷题
搜索 [NOIP2013]华容道 最短路+带剪枝的搜索,是一个思维难度比较大的题目. CF1064D Labyrinth 考虑贪心,用双向队列bfs [NOIP2017]宝藏 剪枝搜索出奇迹 题解:h ...
- $CF1063B\ Labyrinth$ $01$最短路/$01BFS$
\(Des\) 有一个网格图,上面的格子分为空地和障碍,障碍是不可以走的.现在从给定的起点出发开始到处乱走,最多可以往左走\(l\)次,往右走\(r\)次.求可能到达的点数. \(Sol\) 如果只限 ...
- 【非原创】codeforces 1063B Labyrinth 【01bfs】
学习博客:戳这里 附本人代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 co ...
- CF 1064 D. Labyrinth
D. Labyrinth http://codeforces.com/contest/1064/problem/D 题意: n*m的矩阵,只能往左走l次,往右走r次,上下走无限制,问能走到多少个点. ...
- 2014百度之星资格赛 1004:Labyrinth(DP)
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- ural 1145. Rope in the Labyrinth
1145. Rope in the Labyrinth Time limit: 0.5 secondMemory limit: 64 MB A labyrinth with rectangular f ...
- [POJ1383]Labyrinth
[POJ1383]Labyrinth 试题描述 The northern part of the Pyramid contains a very large and complicated labyr ...
随机推荐
- Ubuntu16.04搭建各种开发环境的IDE: QT5 , CodeBlocks ,eclipse-cdt, PyCharm
搭建Ubuntu下C/C++以及Python的集成开发环境,采用双系统(Win7+Ubuntu)的Ubuntu16.04-LTS系统, 关于双系统的搭建可以参考下面博客(图文十分详细):https:/ ...
- 错误代码: 1142 REFERENCES command denied to user 'wuyong'@'localhost' for table 'orders'
错误代码: 1142 REFERENCES command denied to user 'wuyong'@'localhost' for table 'orders' 原因:在使用SQLyog操作数 ...
- Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.
分析:还是权限问题,所以给他加上权限就可以了!! 解决:chmod +s /bin/netstat
- angularJs路由的使用
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Android Studio 常用应用
1.在控制台的Logcat中输出测试语句 package com.example.lucky.helloworld; import android.support.v7.app.AppCompatAc ...
- 003 Android常见错误汇总
1.installation failed with message invalid file 解决办法: <1>.点击工具栏上的Build中的Clean Project <2> ...
- yyy的python3第八天学习
望着小月亮:https://www.cnblogs.com/triple-y/ 请尊重原创:https://www.cnblogs.com/triple-y/p/9655753.html python ...
- leetcode 75 Sort Colors 计数排序,三路快排
解法一:计数排序:统计0,1,2 的个数 时间复杂度:O(n) 空间复杂度:O(k) k为元素的取值范围, 此题为O(1) class Solution { public: void sortC ...
- img的事件
<img src="../images/clock.jpg" onload=alert('加载成功'); onerror=alert("加载失败");/& ...
- [转] 使用 Java8 Optional 的正确姿势
[From] https://unmi.cc/proper-ways-of-using-java8-optional/ 我们知道 Java 8 增加了一些很有用的 API, 其中一个就是 Option ...