DFS的基础运用(25.7.20)
DFS的基础运用
1.很多代码可以使用单个枚举,无需进行x=[1,n]的枚举,类似于[P1219 USACO1.5] 八皇后 Checker Challenge - 洛谷
2.类似[P1123 取数游戏 - 洛谷],有很多选与不选的选项,而且在一些方面对于数的标记是++而不是=1
3.谨记很多数组的初始化
4.阶乘的运用在这里很重要
5.有的操作模拟题,可以思考操作后的状态,不用思考枚举操作
6.二维数组经过冒泡排序反推,可以知道有多少种状态,例题D - Swapping Puzzle
7.在进行DFS枚举的时候,有单循环*2的选数方式,可以减小时间复杂度D - General Weighted Max Matching
(而且可以使用d的单向加,遍历每个数字,判断选与不选)
8.枚举顺序可以反推,用来减小时间复杂度[P1025 NOIP 2001 提高组] 数的划分 - 洛谷
思维方向(注意的点)
1.DFS暴力搜索可以用在很多状态模拟的地方,分成搜索——模拟判断两部分
2.dfs应该尽量使用x的向前枚举,使用更少的维度
3.考虑合适的剪枝ABC_puzzle
4.可以考虑单dfs内枚举两个数D - General Weighted Max Matching
5.要考虑优化这一方面,有的时候就根本不用n*m的循环,只需要直接正向遍历即可,可以省时间
6.区分有几个决策
考法
1.状态枚举,全排列
2.二维图上走动
3.分队问题(包括多队与单队内两个数)

浙公网安备 33010602011771号