C C 練習題 剪繩子

2021-09-25 20:37:43 字數 1167 閱讀 6317

《劍指offer》面試題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。

動態規劃:適用於求問題的最優解。首先從上向下分析問題,要將乙個大問題劃分成兩個子問題,遍歷每一種方案並確定當前最優解,分別對子問題進一步劃分求最優解,直到最小問題的最優解求出。將小問題的最優解回歸,解出問題的最優解。

由於自上而下的遞推公式會產生多個重複的子問題。因此選用自下而上迭代的方法,從已知條件求出最優解。

要使用乙個陣列來記錄每乙個子問題的最優解。

繩長 n > 3,利用迭代方式進行動態規劃

貪心演算法:基於乙個計算策略(有數學方法證明),每一步都是乙個貪婪的選擇。

繩長 n >= 5 剪長度為3的繩子

繩長 n == 4 剪成兩段長度為2的繩子

#include "iostream"

#include using namespace std;

//動態規劃求解

//輸入:繩子的長度 length

//返回:最優解

int max_to_cut(int length)

} //記錄該問題的最優解

products[i] = max;

} delete products;

//4.返回最優解

return products[length];

}//貪婪演算法求解

//輸入:繩子的長度 length

//返回:最優解

int new_max_to_cut(int length)

//4.通常情況下,返回的最優解

Python練習題 剪繩子

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

C C 練習題目總結

題目 從鍵盤輸入一行或幾行字串,行數由鍵盤輸入,一行字串用字元陣列儲存。字串中只有英文數字和字元 void calculate char s ascii碼一共128個,全部算入 while s 0 題目 有10個小朋友圍成一圈分糖果,老師順次分給每人一定數量糖果 初始值為偶數 然後按照下列規則調整,...

python書中練習題 python練習題

1 定義乙個空列表,接收從鍵盤輸入的整數,把列表傳給乙個從大到小排序的函式,再輸出排序後的列表的值 listex b 0 a int input 請輸入列表長度 while b a num int input 請輸入字元 b 1 print listex sum 0 for i in range 0...