給出一些不同長度的小棒,問小棒全部用完是否能構成乙個正方形。
通過特判來起到剪枝的作用
#include#include#includeusing namespace std;
const int maxn=25;
int a[maxn];
bool vis[maxn];
int n,l; //記錄正方形邊長
bool dfs(int pos,int pre,int cnt) //從該索引遍歷、當前長度、已合成邊長數量
l=sum/4;
if(sum%4!=0||ma>l) //剪枝
sort(a,a+n);
memset(vis,0,sizeof(vis));
if(dfs(n-1,0,0)) //從最長邊開始遍歷
cout<<"yes"
cout<<"no"<}
return 0;
}
poj 2362 square 搜尋 剪枝
題目大意 給出n根木棍,問是否可以首尾相連組成乙個正方形。演算法 dfs 剪枝,合理巧妙的剪枝是避免tle的關鍵 1.特判,當木棍總長度不正好是4的倍數時,pass 2.最長的木棍比邊長小時,pass 3.對木棍長排序,每次都從當前最大到小列舉,在同一條邊中,之前放不下的木棍現在也一定放不下 4.已...
POJ 2531(搜尋剪枝)
題目鏈結poj2531 乙個有n個節點的圖 n 20 節點間距c給定,讓你把這個圖分為a b兩類節點使得 c ij,i a,j b 最大,問這個最大值是多少。由於n很小只有20,可以直接列舉,複雜度是220 202 超時。需要剪枝。這道題的剪枝技巧是 採用深度優先搜尋的方法,對每乙個節點都做判斷是否...
POJ 1011 搜尋剪枝
題意 給一堆木棒,這些木棒是由幾根長度相同的長木棒厥斷而成的,求最短的長木棒長度能厥成這些短的木棒。題解 所求長度肯定介於最長木棒和木棒之和中間,並且可以整除木棒之和。於是窮舉所有可能的值,選中乙個值之後,用dfs給木棒尋找組合,能找到就輸出。直接dfs會超時,所以需要剪枝。可以先排序,這樣相同的木...