1. 程式人生 > >動態規劃此一篇就夠了 萬字總結!

動態規劃此一篇就夠了 萬字總結!

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