這幾天學習動態規劃,我的理解是dp大致可分為2類,一種是自下而上(也叫遞推),另一種是自上而下。這兩種方法都可以達到目的。
仔細來講動態規劃是解決多階段決策問題的一種方法。並且每一步得出的結論都講影響下一階段的結果將每一階段都需要取出最佳結果然後一步步下去得出最終答案。並且動態規劃要秉承最優性原理。而最優性原理就是不論初始狀態和第一步決策是什麼,餘下的決策相對於前一次決策所產生的新狀態,構成乙個最優決策序列。最優決策序列的子串行,一定是區域性最優決策子串行。包含有非區域性最優的決策子串行,一定不是最優決策序列。
所以動態規劃的思想就是在做每一步決策時,列出各種可能的區域性解。依據某種判定條件,捨棄那些肯定不能得到最優解的區域性解。以每一步都是最優的來保證全域性是最優的。
動態規劃的一般步驟:
1、判斷問題是否具有最優子結構性質,若不具備則不能用動態規劃。
2、把問題分成若干個子問題(分階段)。
3、建立狀態轉移方程(遞推公式)。
4、找出邊界條件。
5、將已知邊界值帶入方程。
6、遞推求解。
動態規劃用另外一種方法描述就是一種排除重複計算的演算法更具體的就是用空間換取時間。這種方法之一就是記憶化搜尋。
比如你在乙個題目當中可以先把每乙個步驟放到乙個陣列中儲存起來,而當需要使用時只需要在這其中呼叫就可以,無需在重新計算這便節約了時間,而它的代價就是多用了乙個陣列的大小罷了。
動態規劃可以更簡單的解決那些多步驟的複雜問題,也可以節約大量的時間,不過在運用動態規劃演算法做題的時候還是不甚熟練,還需要多做練習。
DP(動態規劃)學習筆記
揹包問題 01揹包每件物品最多使用一次 完全揹包每件物品有無限個 多重揹包每種物品最多有si個 存在樸素版和優化版 分組揹包沒組最多只能選 1 個 dp優化 對dp方程進行等價變形 dp最重要的就是公式推導 對於當前狀態的計算 要滿足兩個條件 不重 不漏 最簡單的01揹包 d p i j ma x ...
動態規劃1(DP)總結
遞迴是最簡單也是最直接的思路,分解小問題,然後得到最終問題的答案。但是遞迴 簡單,但是比較耗時。所以我們思路可以用遞迴,但是出於 效能考慮,還是要提公升效率。這當然是後期的優化了。動態規劃,回溯都是比較常用也比較常見的演算法。這篇來講動態規劃。動態規劃的核心 問題的最優解可以由子問題的最優解得到,那...
動態規劃學習總結
1.有時候階段劃分不正確,導致不是最優解。2.邊界條件找錯,或資料開的小,導致超時或wrong answer等。3.初始化出錯,不是所有的初始化都是為0,有的是其他的,eg memset a,127,sizeof a 這要根據題目具體分析。4.揹包問題有時半天推不出是什麼型別的揹包問題。5.揹包問題...