description
喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過50 。
現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。
給出每段小木棍的長度,程式設計幫他找出原始木棍的最小可能長度。
input
第一行為乙個單獨的整數 n表示砍過以後的小木棍的總數。
第二行為 n個用空格隔開的正整數,表示 n根小木棍的長度。
output
輸出僅一行,表示要求的原始木棍的最小可能長度。
sample input
95 2 1 5 2 1 5 2 1
sample output
6more info
1<=n<=60
主要思路:dfs、剪枝
先尋找可能滿足條件的從小到大dp,看已知的n段小木棍能否拼成tot/i 段i長的小木棍,如果能則輸出當前i,結束程式。如果均不能則輸出tot。(思路**一位dalao)
#include
#include
int max,min=
100,book[51]
;void
dfs(
int rec,
int sum,
int lon,
int now,
int next)
while
(book[next]==0
)//如果沒有接下來要拼湊的長度的木棍
next--
;//繼續尋找更短的木棍
if(lon==sum)
//如果成功利用小木棍拼成lon長的木棍
if(now>next)
now=next;
//防止now長的木棍不存在
if(now>lon-sum)
//將現存的最長的與拼成lon還需要的長度比較
i=lon-sum;
else
i=now;
for(
;i>=min;i--)}
}int
main()
for(i=max;i<=tot;i++
)//木棍長度一定》=最長的一段
if(tot%i==0)
//剪枝
dfs(tot/i,
0,i,max,max)
;printf
("%d"
,tot)
;return0;
}
description
ncust要製作乙個體積為 nπ 的 m層生日蛋糕,每層都是乙個圓柱體。
設從下往上數第 i 層蛋糕是半徑為ri ,高度為 hi 的圓柱。當 ir(i+1) 且hi>h(i+1) 。由於要在蛋糕上抹忌廉,為盡可能節約經費,我們希望蛋糕外表面(最下一層的下底面除外)的面積 q最小。
令 q=sπ,請程式設計對給出的 n和 m ,找出蛋糕的製作方案(適當的 ri和 hi 的值),使 s最小。(除 q 外,以上所有資料皆為正整數)
input
第一行為 n,表示待製作的蛋糕的體積為 nπ;
第二行為 m,表示蛋糕的層數為 m 。
output
輸出僅一行,乙個整數s (若無解則 s=0 )。
sample input
1002
sample output
more info
對於全部資料:1<=n<=10^4,1<=m<=20
洛谷1120小木棍
題目描述 喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過50。現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。給出每段小木棍的長度,程式設計幫他找出原始木棍的最小可能長度。輸入輸出格式 輸入格式 輸入檔案共有二行。第一行為乙個單獨的整數n...
洛谷 1120 小木棍 資料加強版
題目描述 喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過5050。現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。給出每段小木棍的長度,程式設計幫他找出原始木棍的最小可能長度。輸入輸出格式 輸入格式 共二行。第一行為乙個單獨的整數n表示砍...
洛谷 1120 小木棍(資料加強版)
喬治有一些同樣長的小木棍,他把這些木棍隨意砍成幾段,直到每段的長都不超過50。現在,他想把小木棍拼接成原來的樣子,但是卻忘記了自己開始時有多少根木棍和它們的長度。給出每段小木棍的長度,程式設計幫他找出原始木棍的最小可能長度。輸入格式 輸入檔案共有二行。第一行為乙個單獨的整數n表示砍過以後的小木棍的總...