DFS之剪枝與優化 木棒

2021-10-03 23:09:31 字數 1167 閱讀 5910

題目大意:n跟木棍,可以拼接成相同長度的最小長度的木棒,問長度是多少

思路:列舉每根木棒

1.優化搜尋順序:從大到小列舉木棍長度

2.只列舉長度是總和的約數

3.按照組合數枚舉

4.如果當前木棍加到木棒中失敗了,則直接略過所有長度相等的木棍

5.如果木棍第一根失敗,則一定失敗

6.若最後一根失敗,則一定失敗

ac**如下:

#include

#include

#include

using

namespace std;

const

int n =70;

int n;

int w[n]

;int sum, length;

bool st[n]

;bool

dfs(

int u,

int cur,

int start)

return

false;}

intmain()

sort

(w, w + n)

;reverse

(w, w + n)

; length =1;

while

(true

) length ++;}

}return0;

}

題目原文:

喬治拿來一組等長的木棒,將它們隨機地砍斷,使得每一節木棍的長度都不超過50個長度單位。

然後他又想把這些木棍恢復到為裁截前的狀態,但忘記了初始時有多少木棒以及木棒的初始長度。

請你設計乙個程式,幫助喬治計算木棒的可能最小長度。

每一節木棍的長度都用大於零的整數表示。

輸入格式

輸入包含多組資料,每組資料報括兩行。

第一行是乙個不超過64的整數,表示砍斷之後共有多少節木棍。

第二行是截斷以後,所得到的各節木棍的長度。

在最後一組資料之後,是乙個零。

輸出格式

為每組資料,分別輸出原始木棒的可能最小長度,每組資料佔一行。

資料範圍

資料保證每一節木棍的長度均不大於50。

輸入樣例:

95 2 1 5 2 1 5 2 1

41 2 3 4

0輸出樣例:65

AcWing 167 木棒(dfs 剪枝)

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

POJ1011 木棒(dfs 剪枝)

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

DFS之剪枝與優化 小貓爬山

題目大意 n只貓下山,每只貓都有不同的重量,讓他們坐纜車下山,纜車有乙個最大承重樑,最少用多少纜車可以把這些貓都運下去 思路 列舉每乙隻貓,質量從大到小,使分支最少,每只貓可以加入已有的纜車或者開一輛新車 include include include using namespace std con...