算法之動態規劃

動態規劃總結

最優解 依賴重複計算的 獨立的 子過程
1.發現最優解結構
2.推到遞歸式
3.自低向上存儲子過程結果過(備忘錄,非最優子過程,只是存儲,相似迷宮)
4.最優解的存儲和計算spa

這裏1:
1)子問題發現/定義、假設已經有了最優解,怎麼經過子問題解決。好比工廠最快流水線,已經選了一條路徑,要知道如何選擇的,須要知道除固定節點後前面如何選擇的。矩陣乘法,知道劃分後,須要知道最外層兩個括號分別如何計算。LCS知道最終解後,須要知道除最後一個節點外前面解如何選擇的。
2)選擇 須要依賴哪些子問題(越少越好,矩陣乘法沒法作到只依賴一個,依賴兩個。工廠流水和LCS能夠選擇多個,可是一個很簡單直接求取,選擇依賴一個);須要選擇依賴(矩陣循環全部一對可能選擇其1,LCS和工廠選擇知足更優的)
3)注意知足重複計算和獨立(最長非重複路徑這種問題由於一個子問題用的點其餘子問題不能用,因此子問題的最優不是獨立的,沒法用動態規劃),須要簡單的證實最優子解的選擇會致使最優解
4)局部計算(i-k或者0-2)rest

LCS:

兩個串最長非連續公共子串
clipboard.pngcode

clipboard.png
假設最優解已有去推子問題(固有思惟就是對兩個串加節點,纔是n與n-1的關係,不太同樣的思惟)遞歸

矩陣

矩陣最小乘法次數的組合
clipboard.png
一樣的,考慮矩陣多一個n,n-1的關係,改思惟習慣ip

生產線

clipboard.png

clipboard.png
這個雖然能夠用加一個節點,可是從最終最優解來推也能夠的。leetcode

climits的INT_MAX
vector<vector<int> > ret(row,vector<int>(col));get

dfs不熟悉:
https://leetcode.com/problems...
https://leetcode.com/problems...
位運算:
https://leetcode.com/problems...it

相關文章
相關標籤/搜索