給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段(m、n都是整數,n>1並且m>1),每段繩子的長度記為 k[0],k[1]...k[m-1] 。請問 k[0]k[1]...*k[m-1] 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2、3、3的三段,此時得到的最大乘積是18。
示例 1:
輸入: 2示例 2:輸出: 1
解釋: 2 = 1 + 1, 1 × 1 = 1
輸入: 10輸出: 36
解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36
2 <= n <= 58本題要求將某值n分成若干值(a1,a2,...,am-1),使得各值之和為n,並乘積為最大。考慮到相等的數相乘為最大,進行以下計算:
#長度為n,設分為x段乘積最大,則每段值為n/x,乘積為x的x/n的次方。
#由於n為常量,則只需要求出x的1/x次方的最大值即可。
from sympy.abc import x
from sympy import *
y = x**(1/x)
fx = diff(y, x)
print(fx)
print(solve(fx))
實驗結果
計算得到在x=e處時是y的極值,3最接近e,2次接近e,所以最優為每段長度為3,然後切為長度2,最後為長度1。
演算法**
class solution else if(n < 4)
if(n % 3 == 0)
}else if(n % 3 == 1)
sum = sum*4;
}else
sum = sum*2;
}return sum;}}
剪繩子ⅱ答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1。
class solution else if(n < 4)
if(n % 3 == 0)
}else if(n % 3 == 1)
sum = (sum*4) % (1e9+7);
}else
sum = (sum*2) % (1e9+7);
}return (int)sum;}}
劍指 Offer 14 I 剪繩子
問題 給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段 m n都是整數,n 1並且m 1 每段繩子的長度記為 k 0 k 1 k m 1 請問 k 0 k 1 k m 1 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的最大乘積是18。示例...
劍指 Offer 14 I 剪繩子
劍指 offer 14 i.剪繩子 給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段 m n都是整數,n 1並且m 1 每段繩子的長度記為 k 0 k 1 k m 1 請問 k 0 k 1 k m 1 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,...
劍指 Offer 14 I 剪繩子
一 數學推導法 經過一系列推導發現每一段長度為3時,乘積最大。時間複雜度 o 1 空間複雜度 o 1 class solution 二 貪心演算法本質上和數學推導相同,當剩餘長度大於5時每段都切成3,當切到4時,4的最優解是2 2即不切n小於4 返回n 1 n等於4 返回4 n大於4時 繼續切割成長...