題目:給你一根長度為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:剪繩子
class
solution
: def dynamic_programming
(self, n)
:if n <
2: #長度<
2,為0
return
0if n ==
2: #長度=
2,剪成兩段1
return
1if n ==
3: #長度=3,
1x2 return
2 tmp_lst =[0
,1,2
,3]for i in
range(4
, n+1)
: #長度》
4 max =
0for j in
range(1
, i)
: #從下往上分析問題
tmp = tmp_lst[j]
* tmp_lst[i - j]
if max < tmp:
max = tmp
tmp_lst.
(max)
return tmp_lst[n]
s =solution()
print
(s.dynamic_programming(8
))
竟然大概看懂(人家的**)了……安不里屋包 劍指Offer 14 剪繩子(Python)
題目描述 給你一根長度為你的繩子,請把繩子剪成m段 m n都是整數 n 1 且 m 1 每段繩子的長度記為k 0 k 1 k m 請問k 0 x k 1 x x k m 可能的最大乘積是多少?示例 當繩子長度是8時,我們把它剪成長度為2 3 3的三段,此時得到的最大乘積是18。動態規劃 尋找規律f ...
劍指offer14 整數拆分
題目描述 給定乙個正整數 n,將其拆分為至少兩個正整數的和,並使這些整數的乘積最大化。返回你可以獲得的最大乘積。例子 輸入 2 輸出 1 解釋 2 1 1,1 1 1。思路1 暴力遞迴 class solution int process int n int max 0 for int i 2 i ...
劍指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...