LOJ2613 NOIP2013 华容道 【最短路】*】的更多相关文章

LOJ2613 NOIP2013 华容道 LINK 这是个好题,具体题意比较麻烦可以直接看LINK中的链接 然后考虑我们可能的移动方式 首先我们需要把白块移动到需要移动块S的附近(附近四格) 然后我们就可以考虑怎么对S进行移动 操作一:把S和白块互换位置 操作二:把白块从S的一个方向移动到另一方向(方便交换位置) 第一种操作的代价是1很显然,后一种操作我们每次移动的最小代价是可以预处理的 然后我们就可以定义状态x,y,dir表示S在(x,y)且白块在S的dir方向上 我们就只需要考虑在状态之间进…
[NOIP2013]华容道 首先是一种比较显然的做法. 整个棋盘,除了起点,终点和空格,其他的方块是等价的. 对于终点,它始终不会变化,如果搜到终点结束搜索即可,所以我们不需要考虑终点. 所以需要考虑的是空格的位置和起点方块的位置. 定义$f(i1,j1,i2,j2)$为 空格所在坐标$(i1,j1)$  起点坐标$(i2,j2)$. 对于每一步,可以移动空格周围的一个可移动棋子,将它与空格位置交换.其实等价于空格移动到和空格相邻的棋子.如果该棋子是起点,则将起点更新到原来空格的坐标. 使用bf…
[NOIP2013]华容道 [题目描述] 这道题根据小时候玩华容道不靠谱的经验还以为是并查集,果断扑街.考后想想也是,数据这么小一定有他的道理. 首先由于是最小步数,所以BFS没跑了.那么我们大可把这道题分为两部分,首先先把白格子移到目标棋子附近,然后再把目标棋子移过去.第一步是很容易的,随便BFS一下就好了,关键是第二步.由于q不小,我们不可能每次询问都直接爆搜,但由于棋盘并不会发生本质改变,我们可以对一些东西进行预处理. 那每次询问时不变的是什么呢,我们求第二步时需要的又是什么呢? 首先我们…
感觉和以前做过的一个推箱子很像,都是可以用bfs解决的,而且都是手玩出结论. 因为起始棋子肯定是要和空格交换的,所以第一件事是先把空格移到棋子旁边.然后讨论怎么设计搜索状态.由于和推箱子实在太像了,所以直接借鉴,发现空格总是要贴着棋子走的要不然就是换个贴的方向继续走(这里的走就是指交换).于是绑定两者,设计状态$f_{i,j,dir}$表示在棋子在某个格子,空格在上下左右四方位时候的最小移动次数.显然可以暴力bfs跑,但是这样没有经过优化,效率不高,实际上只要把它改的像最短路算法一点就行了,比如…
#include <cstdio> #include <algorithm> #include <cstring> #include <queue> #define inf 0x3f3f3f3f #define N 35 #define maxn 5000 #define mod 1000000007 #define ll long long using namespace std; int n,m,q,cte; ]; ,,,}; ,,,-}; struct…
http://172.20.6.3/Problem_Show.asp?id=1442 想到最短路的简直神了,如果我写我大概只能写一个30分的bfs. 从数据范围可以看出思路是bfs剪枝,但这里的剪枝是通过最短路的预处理实现的. 设需要移动的格子为a格子. 对求最小移动数有意义的移动只有两种,一种是空白格子的移动,一种是a格子移动到空白格子里. 可以得知要把空白格子移动到a格子旁边然后对a格子进行移动. 那么我们有了每次查找时进行的预处理1:求空白格子到a格子四周格子的最短路. 在模拟移动的过程中…
传送门:https://vijos.org/p/1983 (其实noip的题各个oj都会有的,就不贴其它传送门了) 这道题真的是,怎么说,我都不知道怎么评价了= =.果然数据量小的题怎么暴力都可以过...当然我没说这一题要用最最暴力的bfs. 首先这一题的特点是给定一个图,之后有q(q <= 500)个询问,这很显然就是暗示我们要预处理.那么预处理什么呢?首先观察这一题,若你想让目标棋子移动到指定的位置,一定是分以下几步(注意移动棋子等价于移动空白格子): 1) 先把空白格子移动到目标棋子的四联…
1.题面 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间.小 B 玩的华容道与经典的华容道游戏略有不同,游戏规则是这样的: 在一个 n*m 棋盘上有 n*m 个格子,其中有且只有一个格子是空白的,其余 n*m-1个格子上每个格子上有一个棋子,每个棋子的大小都是 1*1 的: 有些棋子是固定的,有些棋子则是可以移动的: 任何与空白的格子相邻(有公共的边)的格子上的棋子都可以移动到空…
预处理出每个点周围四个点互相到达的最短路,再在整个图上跑SPFA,要记录路径 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<queue> #define N 32 using namespace std; ]={-,,,},dy[]={,,-,}; ][],f[N][N][]; ];…
传送门 这道题中,棋子的移动是要移动到空格上去,所以空格要在棋子旁边才能移动棋子;而棋子移动的方向由空格决定 所以我们可以记三维状态\(di_{i,j,k}\),表示状态为棋子在\((i,j)\),空格在棋子\(k\)方向(顺时针编号0到3)上的最短距离 要\(bfs\)预处理\(mv_{i,j,k,l}\),表示不动\((i,j)\),把空格从\(k\)方向移到\(l\)方向的最短距离.转移时枚举棋子要走的方向\(l\),然后要把空格移到棋子\(l\)方向,再让棋子走上去,注意走完后空格会在棋…
考虑从起点到终点的过程,一定是先将空格子移到指定格子旁边,和指定格子交换,再移到下一个指定格子要到的地方,再交换,如此反复. 于是问题分为两个部分: 1.给定两个曼哈顿距离为2的格子求最短路,BFS即可. 2.根据1的结果决定从起点到终点的路径,使用SPFA求解. 其中,第一个问题空格子显然不能经过指定格子,BFS过程中需要特判.第二个问题的状态为(x,y,k),表示当前指定格子在(x,y),空格子在它的哪个方向(1<=k<=4). #include<cstdio> #includ…
要优先安排历年NOIP题 考虑到要移动,肯定要先把空的格子移动到起点旁边,所以我们对于每一个询问都先bfs一次求出把空格移到起点的四个位置的最短路,而且要保证不能移动起点的方块. 只有空的格子在一个格子四边的时候才可以进行一次移动,所以将一个可行的格子与它周围四个可能的空格出现位置捆绑为一个结点,这样通过移动空格或者把格子移到空格上都可以转移到下一个点. 对于移动格子的边,只要扫一遍判一下合法就可以连上一条为1的边,剩下的可以采取预处理的策略先bfs一遍然后处理空格在一个格子四周移动时的最小位置…
题目:https://www.luogu.org/problemnew/show/P1979 感到无从下手.但不妨用dp的角度来看.因为空格只有在指定棋子的旁边才有用,所以状态记成制定棋子的位置与空格在自己的哪侧. 转移有两种:与空格交换位置 或 让空格换一个方向.为了第二个转移,需要预处理,bfs出指定棋子在 (x,y) 时从它的哪边走到哪边的最短路. dp的转移可以套到最短路里做.一开始需要让空格来到指定棋子的四个方向(bfs).然后多源最短路或者做4遍最短路. 别忘了优先队列自然的就是从大…
题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 B 玩的华容道与经典的华容道游戏略有不同,游戏规则是这样的: 在一个 n*m 棋盘上有 n*m 个格子,其中有且只有一个格子是空白的,其余 n*m-1个格子上每个格子上有一个棋子,每个棋子的大小都是 1*1 的: 有些棋子是固定的,有些棋子则是可以移动的: 任何与空白的格子相邻(有公共的边)的格子上…
n<=30 * m<=30 的地图上,0表示墙壁,1表示可以放箱子的空地.q<=500次询问,每次问:当空地上唯一没有放箱子的空格子在(ex,ey)时,把位于(sx,sy)的箱子移动到(tx,ty)的最小步数. Solution 一开始听说这道题很难,所以刚拿到题就开始打暴力,emmm... 比较.....的思路是记录当前点的位置和空白点的位置,然后暴力转移. 但这个状态十分没有必要,因为我的位置能动的前提是空格在我的当前位置的旁边. 所以我们把状态变成当前点的位置和空白点在当前点的什么…
因为本蒻实在太蒻了...对于即将到来的NOIP2018ssfd,所以下决心要把自己近期做过的题目(衡量标准为洛谷蓝题难度或以上)整理一下,归归类,简单地写一下思路,就当作自己复习了吧qwq 本随笔持续更新,自2018.9.19开始,计划更新到2018NOIP截止 (但是因为最近写的比赛题比较多..但是没有办法把这些题放上来..所以只能放上主流OJ上面有的题) 如果本蒻今年有幸没有AFO掉,flag先里在这里--之后学省选知识点的时候会重开一贴更新的,到时候希望是更有难度的题目吧. 搜索 [NOI…
搜索 [NOIP2013]华容道 最短路+带剪枝的搜索,是一个思维难度比较大的题目. CF1064D Labyrinth 考虑贪心,用双向队列bfs [NOIP2017]宝藏 剪枝搜索出奇迹 题解:https://www.cnblogs.com/fengxunling/p/9777606.html luogu 有趣的数 [ZJOI2007] 时态同步 [NOIP2002] 矩形覆盖 这题数据太水... 题解:https://www.cnblogs.com/fengxunling/p/984161…
NOIP2013 华容道 图论好题. 介于网上全是些令蒟蒻头昏的题解和排版一塌糊涂以及过于详细的题解...蒟蒻记录一下.. 显然需要将白格移动到 \(s\) 相邻格,然后交换 \(s\) 与白格,再将白格移动到 \(s\) 相邻格,然后交换 \(s\) 与白格--最后一步将白格移动到 与 \(s\) 相邻的 \(t\) ,交换白格与 \(s\). 我们考虑到,将格子 \(a\) 从 \((i,j)\) 移动到相邻的格子 \(b\),需要让白格先移动到 \(b\),之后交换 \(a\) 与白格.显…
快noip了就乱做一下历年的noip题目咯.. noip2014 飞扬的小鸟 其实这道题并不是很难,但是就有点难搞 听说男神错了一个小时.. 就是$f_{i,j}$表示在第$i$个位置高度为$j$的时候最小点击次数 递推的话对于上升的情况只做一次,后面几次在后面再做.. #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace st…
什么题目都不会做于是开始做搜索题. 然而我搜索题也不会做了. 铁定没戏的蒟蒻. 1.NOIP2004 虫食算 “对于给定的N进制加法算式,求出N个不同的字母分别代表的数字,使得该加法算式成立.输入数据保证有且仅有一组解”. 大概就是给你一堆(n个)字母让你求出n进制下的一个n位数加n位数得到n位数的唯一解(允许有前导0). 千算万算没算到最大的优化是从大到小枚举数字 反正顶多26位,个位开始爆搜2333. 几个比较重要的剪枝: 当前列不可能满足立即退出. 一列三个数,知二推一. 当前答案与之前冲…
快考试了,把我以前写过的题回顾一下.Noip2007 树网的核:floyd,推出性质,暴力.Noip2008 笨小猴:模拟Noip2008 火柴棒等式:枚举Noip2008 传纸条:棋盘dpNoip2008 双栈排序:将复杂条件转化为简单约束,二分图染色判断可行性,模拟.Noi2010 能量采集:常见套路,求:ΣΣgcd(i,j),设t = gcd(i,j),能算出gcd=t的点对有(n/t) * (m/t)个,然后利用容斥原理减去2t,3t,……,kt的,倒序枚举.Noip2009 潜伏者:模…
T1 F 缩点缩成个$DAG$,然后根据每个点的度数计算期望值 1 #include<cstdio> 2 #include<cstring> 3 #include<vector> 4 #include<iostream> 5 #include<algorithm> 6 #define int long long 7 using namespace std; 8 namespace AE86{ 9 #define fuck cout<<…
昨天晚上的problems: songfen 坠大子段和,要把[l,r]其中一个数变成P,我们要把最小的数变成p. 当L,R没有取满整个区间,P可以在[L,R]外面!!!!!!!这种情况真是令人绝望.就因为这种情况,爆零. (换浏览器,现存下) dp做法: dp[i][0/1]:到i为止,R=I,当前是否有数被修改过 dp[i][0]=max(dp[i-1][0]+a[i],a[i]);dp[i][1]=max(dp[i-1][1]+a[i],dp[i-1][0]+p,p); O(n) lowb…
https://www.zybuluo.com/ysner/note/1293166 题面 戳我 解析 挺不错的一道图论码量题. 可以借此回顾一下\(noip2013\)华容道. 思路和华容道差不多. 照洛谷数据规模看,暴搜可能有\(\frac{1}{3}\)的分数... 设\(f[w][i][j]\)表示箱子在点\((i,j)\)时,人能否到达\(w\)方向(即\(0/1/2/3\),表示上下左右). 那么我们可以先从人出发\(BFS\)一遍,预处理出未推箱子时的\(f[w][i][j]\).…
题目戳我 懒得粘贴题目了..就这要凑合一下吧... 题解 反正棋盘的状态不会变的... 所以,预处理一下??? 恩,如果一个棋子要移动到某个目标位置的话, 可以看成只有空格和这个子要动呀(其他的有区别吗??) 因此,我们考虑预处理一个数组move[i][j][k][l] 表示在(i,j)位置,空格在k方向的时候,移动到l方向的最短距离 至于方向是哪边就自己定义一下吧.. 那么,这个预处理,直接跑BFS就行了... 最后对于每一个状态求解, 只要先让空格到达移动的棋子旁边,在利用move数组跑SP…
[NOIP2013 提高组] 华容道 P1979 洛谷 强烈推荐,更好的阅读体验 经典题目:spfa+bfs+转化 题目大意: 给出一个01网格图,和点坐标x,y空格坐标a,b,目标位置tx,ty要求移动空格最少步数使点到tx,ty 本题关键: 我们可以发现本题可以用BFS获得很高的暴力分,但是也可以使用DP: $f[i][j][x][y]表示空格在i,j目标点在x,y的最少操作次数$ 但是本题的多次询问给我们一个启发-->可以预处理 所有我们可能可以预先处理一些状态的转移 可以发现很多状态是无…
看别人的代码然后被坑了一下午+一晚上,睡一觉第二天醒悟过来打表过了 果然打表才是正确的调试方法,跟踪什么的去屎(╯‵□′)╯︵┻━┻ 原题: 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间.小 B 玩的华容道与经典的华容道游戏略有不同,游戏规则是这样的:1.   在一个 n*m 棋盘上有 n*m 个格子,其中有且只有一个格子是空白的,其余 n*m-1 个格子上每个格子上有一个棋子…
470. [NOIP2013模拟联考8]最短路(path) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits   Description 给定一个n个点m条边的有向图,有k个标记点,要求从规定的起点按任意顺序经过所有标记点到达规定的终点,问最短的距离是多少.   Input 第一行5个整数n.m.k.s.t,表示点个数.边条数.标记点个数.起点编号.终点编号. 接下来m行每行3个整数x.y.…
题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 B 玩的华容道与经典的华容道游戏略有不同,游戏规则是这样的: 在一个 n*m 棋盘上有 n*m 个格子,其中有且只有一个格子是空白的,其余 n*m-1个格子上每个格子上有一个棋子,每个棋子的大小都是 1*1 的: 有些棋子是固定的,有些棋子则是可以移动的: 任何与空白的格子相邻(有公共的边)的格子上…
题目描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 B 玩的华容道与经典的华容道游戏略有不同,游戏规则是这样的: 在一个 n \times mn×m 棋盘上有n \times mn×m个格子,其中有且只有一个格子是空白的,其余n \times m-1n×m−1个格子上每个格子上有一个棋子,每个棋子的大小都是 1 \times 11×1 的: 有些棋子是固定的,有些…