動態規劃的核心是狀態和狀態轉移方程。
計算狀態轉移方程的方法:
1、遞迴計算。
用直接遞迴的方法計算狀態轉移方程,效率往往十分低下。其原因是相同的子問題被重複計算了多次。
2、遞推計算。
遞推的關鍵是邊界和計算順序。
3、記憶化搜尋。
不必事先確定各狀態的計算順序,但需要記錄每個狀態「是否已經計算過」。
動態規劃基礎:dag上的動態規劃
1、矩陣巢狀。(看清題意,是<,不是<=)
2、硬幣問題。
多階段決策問題
dag看成多階段決策問題就是,每走一步對應乙個階段,這一步可以選擇那幾條路徑對應幾個決策。
多階段決策的最優化問題往往可以用動態規劃解決,狀態及狀態轉移類似於解答樹,階段就是解答樹中的層數,幾個決策對應幾個分支。
1、多段圖的最短路。
2、0-1揹包問題。
更多經典模型
1、線性結構上的動態規劃。
1>最長上公升子串行問題。
2>最長公共子串行問題。
2、樹上的動態規劃。
1>樹的最大獨立集。
2>樹的重心。
3>樹的最長路徑。
3、複雜狀態的動態規劃。
1>最優配對問題。
2>貨郎擔問題。
3>圖的色數。
動態規劃初步
基本原理 類似於遞迴解題,把問題丟給上一層來解決,找出狀態轉換方程即可。當然關鍵問題是如何定義遞迴陣列與找出狀態轉換方程。hello world 走樓梯 有n階樓梯,每次能走一步或兩步,請問有多少種走法。設f n 是n階樓梯不同的走法。則轉移到此狀態的方法有兩種,從n 1階樓梯走一步上來,或者從n ...
動態規劃初步
動態規劃的實質是通過多階段決策過程解決最優化問題,將每個問題分為若干個相互聯絡的階段,在它的每一階段都需要做出決策,這就是動態規劃與貪心演算法的區別,貪心演算法是以一種貪心規則進行最優運算,但往往得到的結果並不是問題的最優解,而動態規劃則不同,動態規劃是每一步都有乙個決策,保證了最優解是我們要找的整...
動態規劃初步探索
下面用乙個很簡單的例子來具體說明一下dp問題的解題過程。題目如下 描述在乙個星期三的早上,某同學想用扔硬幣的方式來決定是否要去上演算法課。他扔 n 次硬幣,如果當中有連續 m 次以上 含 m 次 的結果都是正面,那麼他就去上課,否則就接著睡覺。假設每次扔硬幣扔出的正反兩面的概率都是 0.5。輸入 輸...