面試題14 剪繩子

2021-09-26 22:44:40 字數 870 閱讀 2753

// 面試題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。

思路:動態規劃為了避免重複計算,所以從下往上運算,滿足用動態規劃的三個條件:

1.該問題是求乙個問題的最優解

2.整體問題的最優解是依賴於各個子問題的最優解

3.這些小問題之間還有相互重疊的更小的問題

貪婪演算法的特點:和動態規劃不一樣,該問題每一步都可以做出乙個貪婪的選擇,基於這個選擇,我們確定能夠

得到最優解。

#include#include#include#includeusing namespace std;

//動態規劃求解

int maxproductaftercutting_solution1(int length)

product[i] = max;

} max = product[length];

delete product;

return max;

}//貪婪演算法求解

int maxproductaftercutting_solution2(int length)

int timesof2 = (length - timesof3 * 3) / 2;

return ((int)pow(3, timesof3)*(int)pow(2, timesof2));

}int main()

面試題14 剪繩子

長度為n的繩子,剪為m段,求最大乘積 思路 第一刀後 f n f i f n i 從下到上計算,4可被分為兩個2段 5可分為乙個2乙個3 int maxproductaftercutting int length int max 0 product 1 1 product 2 2 product 3...

面試題14 剪繩子

給你一根長度為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。樣例 輸入 8 輸出 18定義狀態 f ...

面試題14 剪繩子

題目 給你一根長度為n的繩子,請把繩子剪成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。動態規劃 int ma...