給你一根長度為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 乘法計算,除了一以外,越多的數相...