深搜優化剪枝

2022-04-12 02:44:49 字數 443 閱讀 5173

之前做過不少深搜題,很多tle,所以剪枝很重要,如何「未雨綢繆」,避免不必要的搜尋樹分支?

例題:將整數n分成k份,且每份不能為空,任意兩份不能相同(不考慮順序)。

例如:n=7,k=3,下面三種分法被認為是相同的。

1,1,5; 1,5,1; 5,1,1;

問有多少種不同的分法。 輸出乙個整數,即不同的分法。

由題意得,其分發出現重複數字組合則為同一種演算法,那麼保證1-k個數遞增即可

**:

#includeusing

namespace

std;

intn,m,k,s;

int a[10

];void search(int

k) }

for(int i=a[k-1];i<=n/(m-k+1);i++)

}int

main()

深搜的剪枝

深搜前面已經講過,對於剪枝,就是把沒必要的步驟進行if特判剪枝,用好了可以大大的優化複雜度 這裡就根據兩個例題來講吧 詳情見 include include include intn,k int f 210 7 int main printf d n f n k 輸出最大值 return0 詳情見 ...

深搜剪枝小結

深度優先搜尋,俗稱深搜,即dfs,是乙個常用並且基礎的演算法和思想。但是搜尋演算法的時間複雜度往往很大,是oi不被允許的。所以對於深搜的優化最實用和基礎的乙個方法就是剪枝。三原則 1 正確性 2 準確性 3 高效性 正確性,顧名思義就是不能把通向正確的路徑剪去。準確性,則是盡可能多的剪去不會通向正確...

深搜剪枝 小木棍

時間限制 1 sec 記憶體限制 128 mb 提交 7 解決 5 提交 狀態 討論版 命題人 add cy 喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過50。現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。給出每段小木棍的長度,程式設...