poj 2362 square 搜尋 剪枝

2021-07-22 03:27:27 字數 560 閱讀 7172

題目大意

給出n根木棍,問是否可以首尾相連組成乙個正方形。

演算法 dfs+剪枝,合理巧妙的剪枝是避免tle的關鍵;

1.特判,當木棍總長度不正好是4的倍數時,pass;

2.最長的木棍比邊長小時,pass;

3.對木棍長排序,每次都從當前最大到小列舉,在同一條邊中,之前放不下的木棍現在也一定放不下;

4.已經確定有解時,跳過剩下的過程;

5.三條邊都可以,第四條一定可以。

**實現

#include#include#include#includeusing namespace std;

bool f,vis[22];

int n,a[22],sum;

void dfs(int step,int ans,int st) //當前處理第幾條邊;總長度;當前最長木棍長;

for (int i=st;i;i--) }

}int main()

if (sum%4!=0)

{ cout<<"no"{ cout<<"no"<

POJ 2362 搜尋 剪枝

給出一些不同長度的小棒,問小棒全部用完是否能構成乙個正方形。通過特判來起到剪枝的作用 include include includeusing namespace std const int maxn 25 int a maxn bool vis maxn int n,l 記錄正方形邊長 bool ...

pku 2362 Square 深搜 回溯

搜尋經典題,與pku acm 1011題類似。寫得有點拗手,一開始都不知道跳到 去了,還得參考了很久以前做的1011題的原始碼,還得多多練習啊 詳細 problem 2362 user moxiaomomo memory 240k time 110ms language c result accep...

poj 折半搜尋

題意 給你乙個含有n n 1000 個數的數列,問這個數列中是否存在四個不同的數a,b,c,d,使a b c d 若存在則輸出最大的d 思路 完全暴力的話o n 4 會t,可以考慮雙向搜尋,公式變形為a b d c 分別列舉a b和c d,將值和下標存在結構體中,再二分查詢即可 include in...