Luogu P1120 小木棍 加強版

2022-03-13 10:12:07 字數 915 閱讀 4782

喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過 \(50\) 。

現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。

給出每段小木棍的長度,程式設計幫他找出原始木棍的最小可能長度。

\(hhhh\)這題可真是毒瘤啊\(qwq\)。

首先我們先考慮如何\(dfs\),即\(dfs\)時的狀態:

1、擺好了幾根 2、當前這根還剩的長度 3、當前\(dfs\)是要從哪一根開始擺。

好的,這樣會\(t\)飛,所以我們考慮剪枝。

·由於是要全部用光,所以長度一定是總長度的某個因子;而又因為每根木棍至少滿足\(\leq\)原始長度,所以我們可以在全部的因子裡面二分出乙個下界,那麼就是這樣

for(i = 1; i <= n; i ++)

s = sqrt(tot) ;

for(i = 1; i <= s; i ++) if(!(tot % i)) base[++ total] = i, base[++ total] = tot / i;

sort(w + 1, w + cnt + 1, cmp) ;

base[++ total] = tot ; sort(base + 1, base + total + 1) ;

pos = lower_bound(base + 1, base + total + 1, maxn) - base ;

·但這還不夠,我們可以考慮從大到小列舉木棍,因為這樣會減少很多無用狀態。\(emmm\)寫在上面的**裡了。

然而還是\(t\),於是就去瞅了幾眼題解,發現在\(dfs\)裡面還有很多小優化,比如長度的單調性決定了我們可以捨棄部分狀態, 比如如果當前的長度最大都不行,或者已經要開始下一根木棍,那麼就直接\(break\).

真是個瑪麗題啊\(qwq\)

luogu P1120 小木棍 資料加強版

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

P1120 小木棍 資料加強版

喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過 50 現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。給出每段小木棍的長度,程式設計幫他找出原始木棍的最小可能長度。首先在讀入的時候忽略掉長度大於50的木棍 最重要 順便還要記錄一下最短的木...

洛谷 1120 小木棍 資料加強版

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