搜尋演算法(poj1011)

2021-07-24 20:46:46 字數 883 閱讀 6522

首先說一下這道題的目的實際就是給出了有限個小木棍的長度,而且所有的棍子都是由有限個長度相同的棍子截斷得到的,讓你求被截棍子的最小長度,本題的演算法

深搜,當然需要幾個剪枝的:

1、截棍子的最小長度》=小木棍的最大長度;

2、截棍子的長度一定是總長度的分子;

3、搜尋時第i-1條木條跟第i(i>0)木條長度相等且沒有被使用,即第i根木棍也不會用;

4、第一根未使用木條放進去都不能為true,即該長度不對

//

// main.cpp

// t1011

//// created by 小哲 on 16/10/3.

//#include using namespace std;

int length;

bool *isused;

int numarray[64];

bool dfs(int num,int left,int l)

if (left==0)

for (int i=0; i0&&numarray[i-1]==numarray[i]&&!isused[i-1])

isused[i]=true;

if (dfs(num, left-numarray[i], l))

isused[i]=false;

if (left==l||numarray[i]==left) }}

return false;

}void sort(int n)

sort(length);//先從大到小排序

for (int i=numarray[0]; i<=sum; i++)

return 0;

}

POJ 1011 經典搜尋

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

POJ 1011 搜尋剪枝

題意 給一堆木棒,這些木棒是由幾根長度相同的長木棒厥斷而成的,求最短的長木棒長度能厥成這些短的木棒。題解 所求長度肯定介於最長木棒和木棒之和中間,並且可以整除木棒之和。於是窮舉所有可能的值,選中乙個值之後,用dfs給木棒尋找組合,能找到就輸出。直接dfs會超時,所以需要剪枝。可以先排序,這樣相同的木...

POJ 1011 木棒問題

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