喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過50。
現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。
給出每段小木棍的長度,程式設計幫他找出原始木棍的最小可能長度。
輸入格式:
輸入檔案共有二行。
第一行為乙個單獨的整數n表示砍過以後的小木棍的總數,其中n≤65
(管理員注:要把超過50的長度自覺過濾掉,坑了很多人了!)
第二行為n個用空個隔開的正整數,表示n根小木棍的長度。
輸出格式:
輸出檔案僅一行,表示要求的原始木棍的最小可能長度
輸入樣例#1:
95 2 1 5 2 1 5 2 1
#include #include#include
#include
using
namespace
std;
int n,len[101
],cnt,maxlen,ans,len,tot;
bool if_[101
],if_re;
bool dfs(int now,int le,int
num)
for(int i=now+1;i<=n;i++)}}
return
false;}
bool check(int
lenth)
bool cmp(int a,int
b)int
main()
}sort(len+1,len+n+1
,cmp);
for(int i=maxlen;i<=cnt;i++)
}cout
}
洛谷 1120 小木棍 資料加強版
題目描述 喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過5050。現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。給出每段小木棍的長度,程式設計幫他找出原始木棍的最小可能長度。輸入輸出格式 輸入格式 共二行。第一行為乙個單獨的整數n表示砍...
洛谷 1120 小木棍(資料加強版)
喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過50。現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。給出每段小木棍的長度,程式設計幫他找出原始木棍的最小可能長度。輸入格式 輸入檔案共有二行。第一行為乙個單獨的整數n表示砍過以後的小木棍的總...
洛谷 P1120 小木棍 資料加強版
題目 小木棍 思路 搜尋 剪枝。外層迭代加深,列舉最小長度,用dfs判斷。dfs維護3個變數x,y,lst,即用了x根木棍,當前拼到了y,上一根木棍的長度為lst。然後列舉拼接的木棍就好。剪枝一 從大到小排序。剪枝二 如果y不為0,那麼列舉的木棍長不要大於lst,不然就會重複搜尋。剪枝三 如果y 0...