首先假設繩子為 : 2
那麼最大乘積為:1*2
繩子為: 3
乘積最大: 1*3
當繩子長為4開始發現規律
|4|
2*2|
|5|2
*3||
6|3*
3||7
|2*2
*3||
8|2*
3*3|
|9|3
*3||
10|2*
2*3*
3||11
|2*3
*3*3
||12|
3*3*
3*3|
以此類推我們可以看出
最大值都是有2和3組成的,那怎麼判斷2和3的分配個數呢
規律:盡可能將繩子長度分成3,而且繩子的最後一段必須大於等於2
比如4 如果截為第一段為3 ,那麼最後一段為1 就小於2了
再比如5 第一段為3 最後一段剛好為2
或者11 第一段為3 第二段為3 第三段為3 最後一段剛好為2
又或者12 第一段為3 第二段為3 第三段為3 那第四段還剩下 3 為什麼不分為2和 1 呢 原因就是最後一段必須大於1
所以繩子為12:分成 3,3,3,3
"""
給你一根長度為n的繩子,請把繩子剪成整數長的m段(m、n都是整數,n>1並且m>1,m<=n),每段繩子的長度記
為k[1],...,k[m]。請問k[1]x...xk[m]可能的最大乘積是多少?例如,當繩子的長度是8時,
我們把它剪成長度分別為2、3、3的三段,此時得到的最大乘積是18。
輸入乙個數n,意義見題面。(2 <= n <= 60)
"""def
get_max_length
(n):
# n 為繩子長度
# 長度2 ,3 不在規律之內,單獨判斷
if n ==2:
return
2if n ==3:
return
3# 如果剪掉一段3,剩餘長度小於2了,那就代表此時剩餘的繩子為4 如果為2 從上邊的判斷中就出去了
if n -
3<2:
n -=
2return
2* get_max_length(n)
# 否則證明剩餘繩子長度還夠截成3
else
: n -=
3return
3* get_max_length(n)
while
true
: num =
int(
input
('>>>:'))
res = get_max_length(num)
print
(res)
牛客 剪繩子(66題)
本題主要考察的思想是 貪心或者動態規劃,這兩種演算法思想感覺還是比較相似的,但是這一類的題主要是找到規律吧 題目描述 給你一根長度為n的繩子,請把繩子剪成整數長的m段 m n都是整數,n 1並且m 1 每段繩子的長度記為k 0 k 1 k m 請問k 0 xk 1 x xk m 可能的最大乘積是多少...
牛客 切割繩子
切割繩子 有 n 條繩子,每條繩子的長度已知且均為正整數。繩子可以以任意正整數長度切割,但不可以連線。現在要從這些繩子中切割出 m 條長度相同的繩段,求繩段的最大長度是多少。輸入 第一行是乙個不超過 100 的正整數 n,第二行是 n 個不超過 106 的正整數,表示每條繩子的長度,第三行是乙個不超...
牛客Game with numbers(暴力)
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 給定大小為nn的集合ss 乙個數xx被稱為合法的,當且僅當x sx s或者xx存在大於11的真因數,且這些真因數均是合法的 求有多少個數xx滿足2 x m2 leq...