動態規劃的特徵和定義這裏就不談了,關鍵是要怎樣通過代碼來理解動態規劃。這裏收集了一些以前做過的動態規劃典型問題。裏面基本都有比較詳細的註釋以及當時對這些問題的一些理解和看法,並且對於所有的問題基本都有遞歸和迭代兩種版本給大家更好的對比和理解。包括:
1.斐比那契數列(遞歸,迭代)
2.數學三角形問題(遞歸,迭代)
3.0-1揹包問題(包括遞歸版和兩種迭代版,以及一個回溯算法版本)
4.最優矩陣鏈相乘問題(包括遞歸版和迭代版)
5.最大公共子序列問題(遞歸和迭代版)
6.最優二叉查找樹(遞歸和迭代版)
7.生產作業裝配線問題(遞歸,迭代)
8.活動選擇問題(包括動態規劃的遞歸和迭代,貪心算法的遞歸和迭代共四種)
還有一些零散的算法就沒有整理了。這些應該也差不多了。源代碼免費打包下載點這裏:
http://download.csdn.net/detail/wudaijun/4710694
動態規劃的關鍵步驟是:
判斷一個問題是否具有最優子結構,重疊子問題,以及子問題滿足無後效性。
分解問題
找出描述每一個問題的狀態量
弄清這些狀態量之間轉換的方式
如何通過子問題逐步構造
製作備忘和路徑記錄
最後加上代碼就OK了