面試題14 剪繩子(動態規劃 貪婪演算法)C

2021-10-02 18:41:17 字數 876 閱讀 1013

一、動態規劃:

應用動態規劃之前要分析該問題是否能夠將大問題分解成為小問題,分解的問題往往也具有最優解,如果把小問題的最優解組合起來能夠得到問題的整體解,那麼該問題可以使用動態規劃去解決

特點:從上往下分析,從下往上解決

#include

class

max_productcutting_solution};

int max_productcutting_solution::

c_max_productcutting_solution

(int length)}}

return products[length];}

intmain

(int argc,

char

* ar**)

2、貪心演算法

使用貪心演算法需要具備一定的數學建模能力

在剪繩子的貪心演算法中,根據3(n-3)>n,2(n-2)>n,可得當繩子剪到3或者2的時候是最好的

其中需要注意的是,當繩子長度/3的餘數為0,1,2,當為2的時候,根據2的剪法剪剩餘的,為0的時候剛剛剪完,但是,當餘數為1的時候,說明剪多了一次,所以timeof–,將多剪的一段與1組成為2的倍數即可

#include

class

max_productcutting_solution

;int max_productcutting_solution::

c_max_productcutting_solution

(int length)

intmain

(int argc,

char

* ar**)

面試題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 剪繩子

面試題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。思路 動態規劃為了...

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