從「重複計算」到「記憶答案」:一套可以套用在七種經典題型上的解題框架。
課程地圖
同一個子問題被算了幾千次,這就是遞迴慢下來的原因。
01 · 為什麼需要動態規劃
n 每加 1,工作量幾乎翻倍。這是 O(2ⁿ) 的成長速度。
01 · 為什麼需要動態規劃
01 · 為什麼需要動態規劃
大問題的最佳解,可以由小問題的最佳解直接組合出來。
同一個子問題會在不同分支被反覆遇到,所以「記下來」才有意義。
沒有重疊子問題 → 用分治法(如合併排序)就好,記表只是浪費空間。
沒有最佳子結構 → 局部最佳拼不出全局最佳,只能搜尋或用其他模型。
01 · 為什麼需要動態規劃
01 · 為什麼需要動態規劃
寫 DP 不靠靈感。難的永遠只是第一步:定義狀態。
02 · 解題的五步框架
02 · 解題的五步框架
02 · 解題的五步框架
零錢兌換與最長遞增子序列:狀態只有一個下標。
03 · 一維 DP
03 · 一維 DP ▶ 逐步演示
03 · 一維 DP
03 · 一維 DP
03 · 一維 DP ▶ 逐步演示
「拿或不拿」是最常見的決策原型,狀態從此變成兩維。
04 · 背包問題
04 · 背包問題 ▶ 逐步演示
04 · 背包問題
兩個字串各出一個下標,格子的意義是「兩邊各看到哪裡」。
05 · 雙序列 DP
05 · 雙序列 DP ▶ 逐步演示
05 · 雙序列 DP
05 · 雙序列 DP ▶ 逐步演示
矩陣鏈乘法:狀態是一段區間,還要多一個切點。
06 · 區間 DP
06 · 區間 DP
總結
總結
總結