新增1 剪繩子

2022-07-29 02:36:14 字數 720 閱讀 6943

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

解題思路:

本題有動態規劃演算法的幾個明顯特徵:

(1)是求最優解問題,如最大值,最小值;

(2)該問題能夠分解成若干個子問題,並且子問題之間有重疊的更小子問題。

通常按照如下4個步驟來設計乙個動態規劃演算法:

(1)刻畫乙個最優解的結構特徵;

(2)遞迴地定義最優解的值;

(3)計算最優解的值,通常採用自底向上的方法;

(4)利用計算出的資訊構造乙個最優解。

以此題為例,我們定義長度為n的繩子剪下後的最大乘積為f(n),剪了一刀後,f(n)=max(f(i)*f(n-i));假設n為10,第一刀之後分為了4-6,而6也可能再分成2-4(6的最大是3-3,但過程中還是要比較2-4這種情況的),而上一步4-6中也需要求長度為4的問題的最大值,可見,各個子問題之間是有重疊的,所以可以先計算小問題,儲存下每個小問題的結果,逐步往上,求得大問題的最優解。

int maxcutting(int

length)

dp[i] =max;

}return

dp[length];

}

劍指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 剪繩子1

題目描述 給你一根長度為 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。...

剪繩子問題

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