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