題目大意: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...