Square(強大的剪枝)

2022-03-12 03:09:35 字數 662 閱讀 2809

/*題意;

給出一定數量的棍子用這些棍子組成乙個正方形

要求把這些棍子全部用完

能組成正方形輸出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 詳情見 ...