題解 Sticks 小木棍

2021-09-25 20:39:47 字數 791 閱讀 7204

uva

luogu remotejudge需登uva

luogu 加強版

每組資料給出n根小木棍,把它們拼接成若干根長度相等的木棍,求該長度的最小值。

這題似乎就是暴搜加剪枝優化,不過剪枝比較複雜。

先上**:

#include

using

namespace std;

int a[

100]

,v[100

],n,len,cnt;

//正在拼 當前長度 上一根小木棍

bool

dfs(

int stick,

int cab,

int last)

}return

false;}

intmain()

sum+

=a[i]

; val=

max(val,a[i]);

}sort

(a+1

,a+n+1)

;reverse

(a+1

,a+n+1)

;for

(len=val;len<=sum;len++

) cout<}return0;

}

當前長棍剩餘的未拼長度等於當前木棍的長度時,這根木棍在最優情況下顯然是拼到這(如果用更多短木根拼完剩下的這段,把這根木棍留到後面顯然不如把更多總長相等的短木棍扔到後面)。如果在最優情況下繼續拼下去失敗了,那肯定是之前的木棍用錯了,回溯改即可。

2019-7-31

算進 小木棍

acwing 題目位址 洛谷 題目位址 做完16 16的數獨後感覺這些搜尋題都是小清新。但是小木棍這題還是煩了我特別久,因此來寫篇題解吧,總結一下。這題無非就是兩個剪枝,優化搜尋順序 去掉等效狀態 talk is cheap.show me the code.includeusing namespa...

小木棍 搜尋剪枝

小木棍,多麼經典的題目啊,幾年都拿出來做一下,今年終於感覺有點明白了 真為中年婦女的智商著急啊 題解抄的luogu題解,修改了以前抄的 終於ac了.主要難點在於如何進行dfs的剪枝可以二分答案 不二分也不會超時,我的 沒有二分 dfs看看這個答案可不可行雖然資料很小,直接dfs也是會超時的,所以需要...

洛谷 小木棍

description 喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過50 現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。給出每段小木棍的長度,程式設計幫他找出原始木棍的最小可能長度。input 第一行為乙個單獨的整數 n表示砍過以後的...