資料結構與演算法:41 |動態規劃理論:最優子結構、無後效性和重複子問題_zj-csdn部落格
乙個模型:多階段決策最優解模型,重點在於多階段,每個階段都對應著不同的狀態
三個特徵:最優子結構,無後效性,重複子問題。主要抓住最優子結構這一特徵,理解為後面的階段狀態可以由前面的階段狀態推導而來。
狀態定義
首先應該思考怎麼樣把原問題劃分為多個階段,然後判斷我們是需要一維的狀態還是二維的狀態(這一步通常比較容易),以及搞清楚每個狀態的實際意義是什麼。
比如leetcode 第 64 題:最小路徑和(c++)_zj-csdn部落格_leetcode c++最小路徑除錯模板,這個問題:陣列中的每個位置都可以對應乙個階段,所以我們可以定義二維的dp陣列dp[i][j],i 和 j就表示每個階段的座標,陣列的元素值 dp[i][j]就是狀態值, 代表從左上角走到 (i, j)這個位置的路徑和。
狀態轉移
狀態邊界處理
狀態轉移總會有乙個開始/結束或者邊界的地方,這些地方的狀態和其他地方稍有差別,我們需要特殊處理。常見的有二維dp陣列的第一行、第一列,一維dp陣列的第乙個元素,我們需要特殊賦值。
不過這一部分通常比較簡單,很多時候都是賦1或者賦0,進行簡單的推導即可。
編寫**
有了狀態轉移方程之後,編寫**就相對容易了。不過還是需要注意邊界的處理,是很容易忽略的地方。
空間優化
對於很多dp問題來說,比如上面的那個例子,其實並不需要完整的二維dp陣列,很多時候都可以使用滾動陣列或者一位陣列進行替代,不過很多時候空間優化後的**可讀性會降低,可以自行考慮。
leetcode刷題總結 動態規劃
152乘積最大的連續子串行 圈複雜度很高,不要遺漏分支 vectormx len,0 vectormn len,0 213打家劫舍 ii 如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。vectors len,0 vectorn len,0 983最低票價 初始值特別要小心!我們定義 dp ...
刷題 動態規劃
動態規劃法 動態規劃求解問題的四個特徵 求乙個問題的最優解 整體的問題的最優解是依賴於各個子問題的最優解 小問題之間還有相互重疊的更小的子問題 從上往下分析問題,從下往上求解問題 題目 給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k ...
leetcode刷題 動態規劃
動態規劃 英語 dynamic programming,簡稱 dp 是一種在數學 管理科學 電腦科學 經濟學和生物資訊學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。動態規劃背後的基...