P1120 小木棍 資料加強版

2022-08-13 01:24:13 字數 756 閱讀 1006

首先這道題有坑點,超過50的木棍不讀入。

思想肯定就是爆搜啊!但是直接的爆蒐會gg。

接下來是剪枝:

你當然會聰明地取能夠整除的答案來列舉嘛。。

這些木棍可以從大到小排序,然後從大到小湊木棍。對答案無影響。

可以記錄木棍的最大值和最小值,然後列舉木棍的時候就在這個區間裡面弄。

在每一層dfs中可以記錄乙個變數p,表示上一次取的木棍是哪根,從p開始列舉到更小會更快。

若某組拼接不成立,且此時 已拼接的長度為0 或 當前已拼接的長度與剛才列舉的長度之和為最終列舉的答案 時,則可直接跳出迴圈,因為此時繼續列舉其它更小的值時,顯然可能情況更少,且同樣湊不完。(來自@林則徐)

我抄題解來的。。。希望能夠學到。

**:

#include#include#includeconst int maxn = 55;

int m;

int a[maxn];

int sum, minv = 19260817, maxv;

void dfs(int length, int remain, int temp, int p)

for(int i = p; i >= minv; i--)

}}int main()

int temp = sum >> 1;

for(int i = maxv; i <= temp; i++)

printf("%d\n", sum);

return 0;

}

P1120 小木棍 資料加強版

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

P1120 小木棍 資料加強版

原題鏈結 不得不說,這題真的是一道深度搜尋毒瘤題qwq,整整坑了我乙個上午。先說一下大體思路 1.讀入資料的同時 注意過濾掉長度大於50的木棍 算出所有小木棍的總和sum,因為至少所有的小木棍會拼成一根長度為sum的超大木棍 2.找出所有小木棍中長度最大的那根max,原始長度len一定大於等於這個m...

P1120 小木棍 資料加強版

一道不錯的剪枝題,用到的剪枝優化比較多,剪枝思路也值得學習 在這裡我只採取了能通過此題的剪枝,似乎還可以繼續優化?剪枝講解在注釋裡 include include include include includeusing namespace std const int maxn 70 inline ...