搜索总结

个人的小总结之搜索:

以下是我做了丢丢题之后的总结

计算机很多问题无法根据某种确定的法则来求解,可以利用搜索与回溯;

搜索与回溯的题目问法(我做过的练习题中的orz)有

1、排列

2、分解(一个数有几种分解方法);对应的有合成(几个数可以组成这个数),如一个简单的背包问题:一个包可以放的重量是多少,每件物品重量是多少?、

3、遍历。怎么走?怎么跳?有几种走法?(有障碍就用bool 型标记一下)

题型

特点1:跳马:其实马每跳一步所面临的条件都是一样的:没有跳过,或者没有障碍,还超过界限,结束条件是到达终点;

素数环:相当于20个空位,每加入一个数就面临着共同的条件或者约束 与它相邻的数和他的和是素数,唯一面临的条件不一样的是最后一个,要判断和第一个的和是不是素数

所以搜索有循环的意思,他们面临的条件都一样;

特点2 :最值问题:效率最高?时间最少?怎样分配?

需要将所有排列的情况列出找最值

注意剪枝(如求最小值时,如果当前的值已经比之前求出的最小值大了,这就情况就可以舍弃了,不用继续进行)

典型题如:1分书:先找共同条件:找一本没有被选过且他喜欢的书,2 图m的着色:涂一个和这个结点连接的点颜色不同的颜色 3、分配工作:分一个没有被选过的工作

技巧

1、剪枝(不多解释了)

2、排列问题:怎样不重复

(1)素数环的题目

怎样避免出现平移答案,也就是一组答案,最后一个数移到第一个数前面组成一个新的答案;

可以将第一个素数固定,就好比一个手镯,你已经固定1个点朝上,那么整个手镯就转不动了

(2)如数的拆分中,将7分解,7=4+3与7=3+4是一种情况,怎样避免呢?

可以分解时分解的第n个数比n-1大那样7=4+3就没有了,(详细代码见前面的随笔)

(3)有重复元素排列问题:aacc 进行排列 就会aacc,aacc是一种情况,怎样避免?

可以加一个计数器,统计每个字母出现的次数,每用一次计数器-1,可以排列的条件是计数器不为零(代码见前面随笔)

(4)字符序列题目中 ABABC是不允许的,怎样判断呢 ?

A=1,B=2,C=3;

加入第n个数,计算a[n-3]*10+a[n-2]是否等于a[n-1]*10+a[n],相当于例子中12123 发现12=12是不允许的。

原文地址:https://www.cnblogs.com/zzyh/p/6623625.html