初步了解動態規劃

2022-09-11 13:06:15 字數 776 閱讀 8589

通過兩道題來了解

1.給定乙個陣列,它的第 i 個元素是一支給定**第 i 天的**。

如果你最多隻允許完成一筆交易(即**和賣出一支**),設計乙個演算法來計算你所能獲取的最大利潤。

注意你不能在****前賣出**。

輸入: [7,1,5,3,6,4]

輸出: 5

解釋: 在第 2 天(**** = 1)的時候**,在第 5 天(**** = 6)的時候賣出,最大利潤 = 6-1 = 5 。

注意利潤不能是 7-1 = 6, 因為賣出**需要大於****。

此題可以看為  第n天的收益 = max(前n-1天的最大收益,第n天可以得到的最大收益)

解法:

class solution 

int min = prices[0];

int profit =0;

for(int i=1;i)

return

profit;

}}

2.給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。

示例:

輸入: [-2,1,-3,4,-1,2,1,-5,4],

輸出: 6

解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。

class

solution

else

res =math.max(sum,res);

}return

res;

}}

動態規劃初步

基本原理 類似於遞迴解題,把問題丟給上一層來解決,找出狀態轉換方程即可。當然關鍵問題是如何定義遞迴陣列與找出狀態轉換方程。hello world 走樓梯 有n階樓梯,每次能走一步或兩步,請問有多少種走法。設f n 是n階樓梯不同的走法。則轉移到此狀態的方法有兩種,從n 1階樓梯走一步上來,或者從n ...

動態規劃初步

動態規劃的實質是通過多階段決策過程解決最優化問題,將每個問題分為若干個相互聯絡的階段,在它的每一階段都需要做出決策,這就是動態規劃與貪心演算法的區別,貪心演算法是以一種貪心規則進行最優運算,但往往得到的結果並不是問題的最優解,而動態規劃則不同,動態規劃是每一步都有乙個決策,保證了最優解是我們要找的整...

動態規劃初步

動態規劃的核心是狀態和狀態轉移方程。計算狀態轉移方程的方法 1 遞迴計算。用直接遞迴的方法計算狀態轉移方程,效率往往十分低下。其原因是相同的子問題被重複計算了多次。2 遞推計算。遞推的關鍵是邊界和計算順序。3 記憶化搜尋。不必事先確定各狀態的計算順序,但需要記錄每個狀態 是否已經計算過 動態規劃基礎...