劍指offer 剪繩子

2021-10-08 02:39:34 字數 966 閱讀 9358

給你一根長度為n的繩子,請把繩子剪成整數長的m段(m、n都是整數,n>1並且m>1,m<=n),每段繩子的長度記為k[1],...,k[m]。請問k[1]x...xk[m]可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2、3、3的三段,此時得到的最大乘積是18。

例如:輸入乙個8,輸出乙個18;

先來乙個一般性問題:周長一定為n,這時候長length與寬width在什麼情況下,達到面積s最大

s = length * width      設length = x       則:width = n/2 - x

所以 s = x * (n/2 - x)= -x^2 + n*x/2

求導s' = -2x + n/2    s' = 0 --> 得 x = n/4     (0,n/4)區間,s'>0,s單調遞增      (n/4, n)區間,s'<0,s單調遞減

n/4為極大值點;所以在長度x=n/4的時候,s的面積最大;

width = n/2 - x= n/2 - n/4= n/4;所以width = length 的時候 s最大

通過一般性問題得出當定長的時候,截出的子段長度相等的時候,乘積最大

回到本題

繩子長度為n,分成m分,那先設每分長度為x, 分數m=n/x;那麼結果就是 n/x個 x 相乘 f(x)=x^(n/x)

所以問題就回到了n/3的個數上面:

public class solution else if (target == 1 || target == 2)else if (target == 3)

int yushu = target % 3;

switch(yushu)

return 0;}}

劍指Offer 剪繩子 和剪繩子

劍指offer 剪繩子 題目描述 給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段 m n都是整數,n 1並且m 1 每段繩子的長度記為 k 0 k 1 k m 請問 k 0 k 1 k m 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的...

劍指offer 剪繩子

題目 給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k m k 0 k 1 k m 可能的最大乘積是多少?例如當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此 時得到最大的乘積18。思路 動態規劃 任何動態規劃都是由遞迴演...

《劍指Offer》剪繩子

給你一根長度為n的繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段繩子的長度記為k 0 k 1 k m 請問k 0 xk 1 x.xk m 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的最大乘積是18 乘法計算,除了一以外,越多的數相...