劍指offer 剪繩子

2021-08-19 02:33:31 字數 687 閱讀 6307

題目

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

思路

動態規劃

任何動態規劃都是由遞迴演化出來的,因此先定義遞迴形式。

設f(n)為長度為n的繩子的最大乘積。

假設長度為n的繩子,我一刀切下去,可以從1切下去,那麼乘積為1*f(n-1),也可以從i切下去,也就是說最大值為max。

上面這個是遞迴形式。

可以發現,遞迴的話會有多次重複計算,比如f(4)需要算f(2)和f(3),f(5)也需要。因此採用動態規劃,用乙個o(n)的陣列來記錄中間的過程。

#include

using namespace std;

int cutting(int

length)

products[i]=max;

}int result=products[length];

deleteproducts;

return result;

}int main()

劍指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 xk 1 x.xk 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。方法1 動態規劃 public ...