概念 回溯法是把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。 首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得到问题的解)。如果不可行,则跳过对该节点为根的子树的搜索,逐 ...
分类:
其他好文 时间:
2018-11-08 00:10:34
阅读次数:
216
双端队列BFS解决的就是路径权值可能为0的图最短路问题,权值为0插入队头,否则插入队尾。 对于这个题,可以看作上下移动的路径的权值为0,左右移动权值为1,而且不能超过规定的步数。 直接广搜求覆盖的点的数目即可。 (场上我一般BFS被hack了) 代码: ...
分类:
其他好文 时间:
2018-10-15 00:37:21
阅读次数:
190
https://www.luogu.org/problemnew/show/P1778 https://www.luogu.org/problemnew/show/P2578 双向广搜。 有固定起点终点,过程可逆。 有时用于A*估价函数不好用的时候。 万圣节后的早晨 (由于鬼可以同时移动,估价函数不 ...
分类:
其他好文 时间:
2018-10-12 21:11:05
阅读次数:
141
与其说这题是双向广搜板子不如说是哈希表板子... 就像邻接表一样,哈希表挂的链就是邻接表的边 把计数器记在边权上偷懒 一开始看错了条件。。。 记得先模再加mod再模,防止负数 GG 有一个显然的事情是,模数大了空间会大,模数小了 find 时间长 代码: ...
分类:
其他好文 时间:
2018-10-11 21:54:57
阅读次数:
157
一.DFS(深度优先搜索) 过于水略过。 二.BFS(广度优先搜索) 同上。 三.记忆化 记忆化搜索,就是我们的状态会重复利用,为了防止状态的重复计算耗费不必要的时间,我们可以把这个状态的结果记录下来,然后查询表中的结果就行了。 一般来所,记忆化搜索是和DP等价的。如果递推的DP不好写,可以考虑用记 ...
分类:
其他好文 时间:
2018-10-10 20:15:40
阅读次数:
166
T1 电灯 (light) Description ? 有 n 个灯泡排成一列。每个灯泡可能是点亮或熄灭的。有一台操控灯泡的机器,每一次可以选择一段区间,让这段区间中熄灭的灯泡全部点亮,亮着的灯泡全部熄灭。但由于机器已经老化,仅能再使用一次了。 ? 你可以认为点亮的灯泡与熄灭的灯泡交替排列的样子(下 ...
分类:
其他好文 时间:
2018-10-03 22:15:10
阅读次数:
155
题目链接:http://codeforces.com/contest/1006/problem/F %%%dalao dalao们都说这是道模板题,呵呵,确实,但双向广搜(此题深搜也可以)写过的人比较少。 这道题可以考虑直接暴力,显然并不能A掉,因为每次向右下扩展一层,状态数增长不超过2倍,复杂度是 ...
分类:
其他好文 时间:
2018-10-02 13:56:45
阅读次数:
166
bfs广搜 什么是广搜? 百度百科:个人觉得解释地并不好 个人理解:跟dfs一样暴力穷举每种状态,只不过不是“一搜到底”,而是一层一层的搜索 它有什么好处? 1. 容易理解 2. 骗分利器 3. 好写 它有什么弊端? 慢。毕竟是穷举每一种状态 如何实现? 算法流程图如下: c++ include i ...
分类:
其他好文 时间:
2018-10-02 00:21:03
阅读次数:
223
#include using namespace std; const int maxN = 107; const int inf = 1e9 + 7; char G[maxN][maxN], snake[maxN][maxN]; int times[maxN][maxN][15]; int n, ... ...
分类:
其他好文 时间:
2018-09-23 18:13:44
阅读次数:
161
#include using namespace std; const int maxN = 123; const int inf = 1e9 + 7; char G[maxN][maxN]; int times[maxN][maxN][6]; int n, m, sx, sy, ex, ey, a... ...
分类:
其他好文 时间:
2018-09-22 23:49:57
阅读次数:
369