DFS之剪枝与优化-------木棒
题目大意:n跟木棍,可以拼接成相同长度的最小长度的木棒,问长度是多少 思路:枚举每根木棒 1.优化搜索顺序:从大到小枚举木棍长度 2.只枚举长度是总和的约数 3.按照组合数枚举 4.如果当前木棍加到木棒中失败了,则直接略过所有长度相等的木棍 5.如果木棍第一根失败,则一定失败 6.若最后一根失败,则一定失败 ac代码如下: # include <iostream> # include <algorithm> # include <cstring> using namespace std ; const int N = 70 ; int n ; int w [ N ] ; int sum , length ; bool st [ N ] ; bool dfs ( int u , int cur , int start ) { if ( u * length == sum ) return true ; if ( cur == length ) return dfs ( u + 1 , 0 , 0 ) ; for ( int i = start ; i < n ; i ++ ) { if ( st [ i ] || cur + w [ i ] > length ) continue ; st [ i ] = true ; if ( dfs ( u , cur + w [ i ] , i