洛谷 1120 小木棍 資料加強版

2021-09-25 01:30:32 字數 1001 閱讀 5695

題目描述

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

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

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

輸入輸出格式

輸入格式:

共二行。

第一行為乙個單獨的整數n表示砍過以後的小木棍的總數,其中n≤65n≤65

(管理員注:要把超過50的長度自覺過濾掉,坑了很多人了!)

第二行為n個用空個隔開的正整數,表示n根小木棍的長度。

輸出格式:

乙個數,表示要求的原始木棍的最小可能長度

輸入輸出樣例

輸入樣例#1:

95 2 1 5 2 1 5 2 1

輸出樣例#1:

6

解釋:暴力很好寫,主要是剪枝,這裡有4點,1.從最大木板開始搜,2.按從大向小搜避免重複,3.如果湊成整塊後,以後的小的湊不出來,那麼必然湊不出來,4.如果剛開始後大的湊不出來,小的必然也湊不出來。

#include#includeconst int n = 70 ;

int n , cnt , tot , maxn , minn , tm[ n ];

void dfs( int res , int sum , int target , int p )

if(sum==target)

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

}return;

}int main()

}for( int i = maxn ; i <= tot ; i ++ )

}printf("%d" , tot );

return 0;

}

洛谷 1120 小木棍(資料加強版)

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

洛谷 P1120 小木棍 資料加強版

題目 小木棍 思路 搜尋 剪枝。外層迭代加深,列舉最小長度,用dfs判斷。dfs維護3個變數x,y,lst,即用了x根木棍,當前拼到了y,上一根木棍的長度為lst。然後列舉拼接的木棍就好。剪枝一 從大到小排序。剪枝二 如果y不為0,那麼列舉的木棍長不要大於lst,不然就會重複搜尋。剪枝三 如果y 0...

洛谷 P1120 小木棍 資料加強版

喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過5050。現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。給出每段小木棍的長度,程式設計幫他找出原始木棍的最小可能長度。搜尋加剪枝 剪枝 1 使用桶排,因為長度不超過50。2 列舉的長度應該能...