POJ 1011 搜尋剪枝

2021-08-21 11:48:03 字數 647 閱讀 9475

題意:給一堆木棒,這些木棒是由幾根長度相同的長木棒厥斷而成的,求最短的長木棒長度能厥成這些短的木棒。

題解:所求長度肯定介於最長木棒和木棒之和中間,並且可以整除木棒之和。於是窮舉所有可能的值,選中乙個值之後,用dfs給木棒尋找組合,能找到就輸出。

直接dfs會超時,所以需要剪枝。可以先排序,這樣相同的木棒就聚在了一起,對於相同的木棒,只要這一長度的第乙個木棒沒被用,那麼這些木棒都一定是不可以的,這樣就可以過了。

**

#include#include#include#includeusing namespace std;

int a[100],vis[100];

int n;

int len_max,len_sum,len;

bool flag;

int cmp(int a,int b)

void dfs(int deep,int l,int num )//deep深度,也就是用了幾個棒 l當前長度 num搜到的位置

if(l==len )

dfs(deep,0,0);

return ;

} int i;

for(i=num;i}int main()

printf("%d\n",len);

}}

POJ 1011 剪枝練習

題意 給定n條拆掉的棍子,問能湊成最短的多條相同長度棍子的最短長度 x 當前第幾條正在合成的棍子 y 目前正在嘗試的拆掉的棍子 z 當前長度 剪枝方案 1.按照長度單調性排序,減少重複搜尋 2.如果當前拼接棍子失敗,那接下來相同長度也會失敗 3.第一條棍子就失敗就不必搜尋了 h e a d int ...

POJ1011 木棒(dfs 剪枝)

問題重述 description 喬治拿來一組等長的木棒,將它們隨機地砍斷,使得每一節木棍的長度都不超過50個長度單位。然後他又想把這些木棍恢復到為裁截前的狀態,但忘記了初始時有多少木棒以及木棒的初始長度。請你設計乙個程式,幫助喬治計算木棒的可能最小長度。每一節木棍的長度都用大於零的整數表示。inp...

POJ 1011 經典搜尋

這道題 是 比較經典的 搜尋題。題意 給出一堆小木棍的長度,需要把它們拼成幾根相同的大棍子,求 這些大棍子的最短長度 分析 這道題主要使用,深度搜尋 遞迴,當然這裡用到多次剪枝,這對於減小時間複雜度很有效。include includeusing namespace std int stick 64...