LeetCode 數學 剪繩子

2022-08-20 08:39:08 字數 1240 閱讀 2907

給你一根長度為 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。

示例:

輸入: 2

輸出: 1

解釋: 2 = 1 + 1, 1 × 1 = 1

輸入: 10

輸出: 36

解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36

說明:將長度為 n 的繩子分成 a 段:

\[n = n_1 + n_2+n_3+\dots+n_a

\]使得,每段長度的乘積最大:

\[max(n_1 \times n_2 \times n_3 \times \dots \times n_a)

\]因為

上面的不等式當 \(n_1=n_2=\dots=n_a\) 時等式成立,也就是說均分長度為 n 的繩子時,得到的乘積最大。均分多少段才能得到最大值呢?假設均分為 a 段,每段的長度為 x,也就是 \(n = ax\),那麼每一段的乘積為:

\[x^a = x^} = (x^})^n

\]因為 n 是確定的,所以最大化 \((x^})^n\),就等於最大化 $ x^} $,我們對 \(x^}\) 取對數得到 \(\frac \ln x\),最大化 \(x^}\) 就等於最大化 \(\frac \ln x\),我們對 \(\frac \ln x\) 求導可得:

\[\frac - \frac \ln x \\

= \frac

\]令上式為 0,可以得到 \(1-\ln x=0\),所以 x = e = 2.7.....,由於每段的長度 x 必須為整數,所以 x 為 2 或者 3 比較好。因為 \(3^}>2^}\),所以每段的長度為 3 最好。

我們可以得出以下結論:

所以演算法如下:

**如下:

class solution 

};

solution/mian-shi-ti-14-i-jian-sheng-zi-tan-xin-si-xiang-by/

day20 25 剪繩子(數學)

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

劍指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的三段,此時得到的...

剪繩子問題

給你一根長度為 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。首先是貪婪演算法 ...