/*題意;
給出一定數量的棍子用這些棍子組成乙個正方形
要求把這些棍子全部用完
能組成正方形輸出yes否則輸出no
分析;正方形的邊長都相同
即是找出四條邊長一樣的邊
第一 : 周長必須是4的倍數
第二 : 最長的木棍必須小於等於邊長
第三:木棍重大到小排序 找邊是從大向小的開始找,不必每次都從頭找一遍
using namespace std;
int stick[25];
int vis[25];
int op=0,bianzhang ;
int m;
bool mycmp(int a,int b)
void dfs(int cur,int sum,int start)
if(op)return ;
for(int i=start; i1)continue;
if(sum+stick[i]==bianzhang)
else if(sum+stick[i]bianzhang)
dfs(0,0,0);
if(op )
printf("yes\n");
else
printf("no\n");
}return 0;
}
poj 2362 square 搜尋 剪枝
題目大意 給出n根木棍,問是否可以首尾相連組成乙個正方形。演算法 dfs 剪枝,合理巧妙的剪枝是避免tle的關鍵 1.特判,當木棍總長度不正好是4的倍數時,pass 2.最長的木棍比邊長小時,pass 3.對木棍長排序,每次都從當前最大到小列舉,在同一條邊中,之前放不下的木棍現在也一定放不下 4.已...
搜尋時的剪枝
一 普通剪枝 可行性剪枝 搜尋時加入判斷條件,越界沒越界,走沒走過,已經找到符合條件的路了嗎.二 從起點到終點的最短路徑的題 最優化剪枝 走到一點,可判斷是不是已經大於當前最短路徑了,是不是此時的路徑長度 到此時到終點最短距離已經大於當前最短路徑了.三 從起點到終點的路徑長度可否等於乙個給出的距離,...
深搜的剪枝
深搜前面已經講過,對於剪枝,就是把沒必要的步驟進行if特判剪枝,用好了可以大大的優化複雜度 這裡就根據兩個例題來講吧 詳情見 include include include intn,k int f 210 7 int main printf d n f n k 輸出最大值 return0 詳情見 ...