牛客剪繩子(暴力列舉)

2021-10-08 09:43:52 字數 1412 閱讀 9178

首先假設繩子為 : 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...