題目大意
給出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...