《劍指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...