《劍指offer》 貪心演算法

2021-10-06 22:23:39 字數 799 閱讀 5492

一、剪繩子

題目描述:給你一根長度為n的繩子,請把繩子剪成整數長的m段(m、n都是整數,n>1並且m>1),每段繩子的長度記為k[0],k[1],...,k[m]。請問k[0]xk[1]x...xk[m]可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2、3、3的三段,此時得到的最大乘積是18。

解答思路:目標是求解最優解,整體問題的最優解是依賴各個子問題的最優解,這時可以用動態規劃來解決。當繩子長度為2時,只可能簡稱長度為1的兩段,所以f(2)=1;當繩子長度為3的時候,可以剪成長度為1和2的兩段,所以f(3)=2;當繩子長度為4的時候,可以剪成長度為1和3,也可以簡稱2和2的兩段,f(4)=4。所以,f(n)=max(f(i))*f(n-i))。

注意:這裡陣列中迴圈的數是每次切割最小的段長,不是解的值

class solution 

}p[i]=max_multi;

}max_multi=p[number];

delete p;

return max_multi;}};

二、**跳台階解答思路:先對這個問題進行分解。當有n個台階的時候,有n種跳法,可以一步跳n個台階上去。所以,f(n)=f(1)+f(2)+f(3)+...+f(n-1)+1=

class solution 

return res;}};

剪繩子 貪心演算法 劍指offer

題目分析 先舉幾個例子,可以看出規律來。2 1 1 3 1 2 4 2 2 5 2 3 6 3 3 7 2 2 3 或者4 3 8 2 3 3 9 3 3 3 10 2 2 3 3 或者4 3 3 11 2 3 3 3 12 3 3 3 3 13 2 2 3 3 3 或者4 3 3 3 下面是分析 ...

劍指Offer(七) 貪心

乙隻青蛙一次可以跳上1級台階,也可以跳上2級 它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。設f i 表示 當前跳道第 i 個台階的方法數。那麼f n 就是所求答案。假設現在已經跳到了第 n 個台階,那麼前一步可以從哪些台階到達呢?如果上一步跳 1 步到達第 n 個台階,說明上一步在...

演算法 劍指offer

思路 若百位上數字為0,百位上可能出現1的次數由更高位決定 若百位上數字為1,百位上可能出現1的次數不僅受更高位影響還受低位影響 若百位上數字大於1,則百位上出現1的情況僅由更高位決定。舉例 個位1出現的次數 round 1 1 每次迴圈1出現一次,0 9迴圈了53次,第54次迴圈為0 4 十位1出...