劍指offer 14 剪繩子

2021-09-28 20:51:41 字數 803 閱讀 6323

這種文章網上很多,沒什麼營養,我只是自己記錄一下。

(雖然現在不找工作了,但以後演算法能力肯定需要加強,想著能不能每天堅持一道題,其實真做起來還有點難)

劍指offer以前都是邊看答案邊記下來,現在能不能靠自己寫出來呢。

時間複雜度為o(n2),空間複雜度為o(n)

有一點要注意,m不是乙個給定的引數。

思路是,(和書上不一樣)

剛開始想,dp[i]是長度為i時切割後最大的乘積,dp[8] = max(dp[7]*1,dp[6]*2,dp[5]*3,…,dp[2]*6,dp[1]*7),對於長度為8,我最後一刀切成1,2,3,…6,7,剩下部分由你之前算得的最優值提供。

後來除錯發現,這樣是不對的,比如dp[2]的值為1(1 *1),因為必須要有切割,但在求dp[8]時要用到dp[2]*6,卻可以看作左邊長度為2不進行切割,所以還要加上max(dp[2],2)*6,這樣就對了。具體**如下。

**:

#include

#include

#include

using

namespace std;

intmaxcutproduct

(int n)

dp[i]

= maxres;

}int res = dp[n]

;delete dp;

return res;

}int

main()

劍指offer 14 剪繩子

分析 本題可以用動態規劃,也可以用貪心法。動態規劃 設f n 表示當繩子長n時可以得到的最大乘積,那麼假設在i處切一刀,就會得到數學式子f n max f i f n i 02等於4,但是當n大於等於5時,我們就要拆成盡可能多的3和剩下的2。如果要證明,我們可以證明當n大於5時,有3 n 3 2 n...

劍指Offer 14 剪繩子

nowcode 把一根繩子剪成多段,並且使得每段的長度乘積最大。n 2 return 1 2 1 1 n 10 return 36 10 3 3 4 盡可能多剪長度為 3 的繩子,並且不允許有長度為 1 的繩子出現。如果出現了,就從已經切好長度為 3 的繩子中拿出一段與長度為 1 的繩子重新組合,把...

Python 劍指offer 14 剪繩子

題目 給你一根長度為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.解題思路 動態規劃 面試題14 剪...