《劍指offer》–目錄索引
題目:
給你一根長度為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 (n>=1),第一次剪繩子,為了使乘積最大,減長度為i,表示式為f(n)=f(n-i)*f(i);類似這樣進入遞迴;
②其次確定最終子問題的」狀態「:當長度為1,2,3,4的時候,最大乘積都只有一中選擇,分別對應為0,1,2,3;
③最後看狀態轉移表示式,if(max < f(n)) ,這個max的判斷需要用乙個迴圈來比較,比如想知道長度為5的繩子剪成兩段,求最大乘積,**可如下:
int
max=0;
for(int i=1;i<5/2;i++)
}
**如下:
int maxproductaftercutting_solution1(int
length)
}max = products[length];
free(products);
products = null;
return
max;
}
貪婪演算法:**如下:用最小的數求得最大的值,在這個題中可以轉換成:用最短的繩子長度,得到最大的乘積,剪繩子的問題中,數值最小價值最大,就是指 2和3以及對應的2*2=4 3*3=9,因為2和3不能再拆分了,雖然不可拆分的資料有0 1 2 3,但是2 3的乘積相對來說最大,所以從2 3 兩個角度出發 用貪婪演算法得到近似最優解
int maxproductaftercutting_solution2(int
length)
劍指offer014減繩子
給你一根長度為 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...
劍指Offer 剪繩子 和剪繩子
劍指offer 剪繩子 題目描述 給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段 m n都是整數,n 1並且m 1 每段繩子的長度記為 k 0 k 1 k m 請問 k 0 k 1 k m 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的...
劍指offer 剪繩子
題目 給你一根長度為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。思路 動態規劃 任何動態規劃都是由遞迴演...