一般来说,广搜常用于找单一的最短路线,或者是规模小的路径搜索,它的特点是"搜到就是最优解",而深搜用于找多个解或者是"步数已知(比如3步就必须达到条件)"的问题,它的空间效率高,但是找到的不一定是最优解,必须记录并完成整个搜索,故一般情况下,深搜需要非常高效的剪枝(优化).像搜索最短路径这些的很明显...
分类:
其他好文 时间:
2014-10-12 16:46:18
阅读次数:
222
题目链接:http://poj.org/problem?id=2245思路: 无重复元素组合组合问题,使用暴力枚举法,注意剪枝条件。代码:#include using namespace std;const int MAX_N = 15;int n, k = 6;int Set[MAX_N], A....
分类:
其他好文 时间:
2014-10-12 15:28:58
阅读次数:
197
DP其实也是和搜索一样可以有剪枝的,昨晚看到一个超级好的DP剪枝题:(HDU - 5009)N段东东,要染色,每次给一个区间染色需要的花费为该区间颜色总数的平方。每一段只能被染一次色。求最少花费将所有区间染色。 N=i的话,还不如直接每次只染一小段,所以循环就可以停止了。优化B:比如数据3 4 2 ...
分类:
其他好文 时间:
2014-10-12 12:11:47
阅读次数:
142
剪枝好题.题目大意:给一个地图,有一条蛇,给定从头到尾的各个点的坐标,地图上有些点是不能走的,然后就是跟以前玩过的贪吃蛇的规则一样了,蛇头不能碰到自己,问至少要多少步才能让蛇头从起点到达终点.地图长宽都是20以内,蛇长范围(2~8)思路:求最少步数,用bfs,图并不大,但是需要记录蛇的状态,还要判断...
分类:
其他好文 时间:
2014-10-09 00:57:37
阅读次数:
199
题意:有一些木棍,它们的长度相同。现在将木棍折断,最多折成64根。编程求木棍可能的最小长度。越长的木棍对后面木棍的约束力越大,因此要把小木棍排序,按木棍长度从大到小搜索,这样就能在尽可能靠近根的地方剪枝。(剪枝一)如果当前木棍能恰好填满一根原始木棍(可能已经是第二层甚至第N层DFS了,此时原始木棍长...
分类:
其他好文 时间:
2014-10-08 13:54:25
阅读次数:
172
写到一半才发现可以用双向搜索4层来写,但已经不愿意改了,干脆暴搜+剪枝水过去算了。
想到一个很水的剪枝,h函数为 当前点到终点4个点的最短距离加起来除以2,因为最多一步走2格,然后在HDU上T了,又发现再搜索过程中,这个估价函数应该是递减的(贪心),再加上这个剪枝就过了。
#include
#include
#include
#include
#include
#include
#i...
分类:
其他好文 时间:
2014-10-04 23:53:57
阅读次数:
262
相似的BFS+剪枝的问题。由于层交换不需要时间,所以在剪枝的时候也不需要考虑x方向消耗的时间。这里只有两层,所以用异或的方式,就可以实现层次的交换!...
分类:
其他好文 时间:
2014-10-01 13:32:51
阅读次数:
164
这是一道非常好的BFS题目。
我们正常在BFS的时候都没有太注意剪枝的问题,而这道题目很好的解释了剪枝的重要性!...
分类:
其他好文 时间:
2014-10-01 02:15:00
阅读次数:
189
这题乍一看有点像Decode Ways ,实际上是一个深搜+剪枝的题目
也可以通过三个for循环寻找可行的‘.’的位置
递归方法如下:
vector restoreIpAddresses(string s) {
vector res;
restore(s, 0, 0, res, "");
return res;
}
...
分类:
其他好文 时间:
2014-09-27 02:11:09
阅读次数:
199