n个点的有向完全图,每条边都有一个实数权值,现在我们要找一条长度为n的路使得路上的边权和最接近的一个数x。注意:每个点都有自环(自环是指对于一个点,存在一条边,从这个点出发,指向这个点本身)。可每次搜索一半,搜索出长度为n/2的路径,并存下来,当作路径的前半段。用f[i,j]数组存下所有以i结尾的长度n/2的路经权值和,并将j这一维按权值和排序。即f[i,1]表示所有路径中权值和最大的,f[i,2]表示权值和第二大的。依此类推。然后搜后半段路径,每搜出来一条,若这条路径以i开头,权值和为y,则在f[i]中二分查找一个离x-y最近的权值和,构成完整的路径。这就是一个二分法剪枝的优化。
深搜得剪枝方面,我们从三个方面进行优化:1.搜索的顺序能不能优化,你的顺序不一样,最后取解得时间就不尽相同。2.可行性剪枝,有些地方搜索超过了条件,是不可能的,所以可以进行剪枝。3.最优性剪枝,即只搜索最逼近最优解的搜索剪枝。
我们的功夫要下在编程之外,我们要学会分析,这才是最重要的