技巧性搜索阶段总结

(1) P1118 数字三角形——暴力dfs->找规律+剪枝

https://blog.csdn.net/qq_35299223/article/details/102897256

这题的加速主要是求和的过程使用了杨辉三角进行加速,但是除了这一处的加速之外,还有一个就是增加了dfs最大最小值dfs剪枝。

(2) P1433 吃奶酪——求最大最小值常用的dfs剪枝方法

https://blog.csdn.net/qq_35299223/article/details/102930778

上面提到的 常用的最大最小值dfs剪枝,实际上就是在dfs的过程中添加一个参数,计算当前的值是否已经超过目前的得到的最大值或者最小值,如果已经超过了,那么就进行剪枝,这是一个常用的剪枝技巧。

(3) P1434 [SHOI2002]滑雪——记搜经典例题

https://blog.csdn.net/qq_35299223/article/details/102911934

本题是一个记忆化搜索的模板题,总结的模板如下。注意就是在返回条件上加上一个当前搜索的值是否已经存在,存在就返回。每次搜索的时候要去记录下这个结果。

//记忆化搜索框架
int mark[maxsize][maxsize];
int dfs(int row,int col){
	if(mark[row][col]){
		//如果搜索的点已经被填充过;
		return;//直接返回
	}
	
	int res;//初始化一个值,也可以直接将mark[row][col]初始化为一个值,然后对mark[row][col]进行更新
	for(遍历周围的点){
		if(满足深搜的条件){
			int val=dfs(更深一层);
			res=  res.....val....;//根据题目关系,对res和更深一层搜索结果的返回值做一个处理,更新res
		}
	}
	
	//搜索完之后一定要将结果记录在mark[][]上!
	mark[row][col]=res;
	return mark[row][col];//最终返回结果为当前的mark[row][col]的值
}
(4) P1074 靶形数独——有优先顺序的dfs

https://blog.csdn.net/qq_35299223/article/details/102956881

本题是一个有优先次序的dfs,其本质为先根据权重大概确定一个搜索的路径,然后按照该路径搜索,这样可以减少搜索的时间。

(5) P1126 机器人搬重物———类dijkstra搜索,路径搜索去重

https://blog.csdn.net/qq_35299223/article/details/102837085

这题是一个类似于最短路径的问题。搜索其实一直有一个关键问题就是如何防止重复搜索。

解决这个问题的方法一个是标记+回溯,搜索过程中不去搜索已经标记了的点。

另外一个就是只对有价值继续搜索的点进行搜索。 本题中就是搜到重复的点,如果这个点可以更新当前点的状态,那么我们可以继续去搜索它。如果不能更新状态,那么我们就不去进行后续的搜索。 这个其实和dijkstra算法的最短路径搜索有些类似。但是总体来说,尽量避免大量的记录路径,除非题目要求枚举全排列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值