目錄
首先,先大緻列下這篇文章會講到什麼
1.相較于暴力解法,動态規劃帶給我們的是什麼?為什麼會有重疊子問題以及怎麼去避免的?
2.用不同難度的動态規劃問題舉例說明, 最後會使用《打家劫舍》系列三個題再重溫一次.
一、動态規劃帶給我們的優勢
傳統遞歸 vs. DP
1. 先 遞歸解決
2. 後 動态規劃解決
3. 動态規劃 + 優化
二、動态規劃四大解題步驟處理問題
步驟一:定義dp數組的含義
步驟二:定義狀态轉移方程
步驟三:初始化過程轉移的初始值
步驟四:可優化點(可選)
案例一:打家劫舍I 「來自leetcode198」
步驟一: 定義dp數組的含義
步驟二:找出關系元素間的動态方程
步驟三:初始化數值設定
步驟四:優化
案例二:不同路徑「來自leetcode62」
步驟一:定義dp數組的含義
步驟二:找出關系元素間的動态方程
步驟三:初始化數值設定
步驟四:優化
案例三:不同路徑II 「來自leetcode63」
步驟一:定義dp數組的含義
步驟二:找出關系元素間的動态方程
步驟三:初始化數值設定
步驟四:優化
案例四:打家劫舍II 「來自leetcode213」
步驟一: 定義dp數組的含義
步驟二:找出關系元素間的動态方程
步驟三:初始化設定
步驟四:優化
案例五:打家劫舍III 「來自leetcode337」
步驟一: 定義dp數組的含義
步驟二:找出關系元素間的動态方程
步驟三:初始化設定
動态規劃 - 超詳細系列
該文章較長,比較詳細的闡述了動态規劃思想,請耐心跟着思路走下去
動态規劃 - 超詳細系列
動态規劃,一直以來聽着就是一種很高深莫測的算法思想。尤其是上學時候算法的第一堂課,老師巴拉巴拉列了一大堆的算法核心思想,貪心、回溯、動态規劃... ...,開始感覺要在算法世界裡遊刃有餘的進行解決各種各樣牛B問題了,沒想到的還是稀裡糊塗學過了之後還就真的是學過了(大學的課程還真是一個樣子)。再後來才明白,大學的課程一般來說就是入門級講解,用來開拓眼界的,真正想要有一番自己的見解,必須要在背後下一番辛苦,形成自己的思考邏輯。
再後來傳回頭來看,動态規劃了解起來還是比較困難,什麼重疊子問題、動态轉移方程,優化點等等等等,稀裡糊塗,最後痛定思痛,好好看着其他人的分享了解了一部分,瘋狂刷題幾十道。算是基本可以佛擋殺佛了.
在我的這些學習積累過程中,總結出來希望可以給到大家一點小小的幫助,相信在讀完這篇文章的時候,你會感覺到動态規劃給你帶來的奇妙之處。也一定對動态規劃形成自己的思考方式. 很