POJ 2362 搜尋 剪枝

2021-10-07 22:35:15 字數 498 閱讀 8048

給出一些不同長度的小棒,問小棒全部用完是否能構成乙個正方形。

通過特判來起到剪枝的作用

#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會超時,所以需要剪枝。可以先排序,這樣相同的木...