DP 練習

概念複習

形式

TOP DOWN: 紀錄遞迴時的狀態 減少複雜度

 

BOTTOM UP: 用 DP 陣列與 for 迴圈紀錄狀態

概念

TOP DOWN:

int f(int x){
    if(x <= 1) return 1;
    else return f(x-1)+f(x-2);
}
O(\phi^n)

紀錄狀態:

int dp[N];
int f(int x){
	if(dp[x]) return dp[x];
    if(x <= 1) return dp[x] = 1;
    else return dp[x] = f(x-1)+f(x-2);
}
O(n)

幾個特點

1. 重複子問題

 

2.最佳子結構

 

經典題匯集

部分經典題型

Atcoder DP Contest pA ~ pF

(其中A~C是基本的轉移,DE 是 0/1 背包,F 是 LCS)

 

Longest Increasing Subsequence

(二分搜做法、離散化 + 資結、2021 初選 pC)

 

Fractional Knapsack

(分數背包、照 CP 值排序)

部分經典題型

Atcoder DP Contest pN

(\(O(n^3)\) 區間 DP)

\(dp[l][r]\) 表示把 \(a_l,a_{l+1},...,a_r\) 合併的最小價值

 

Atcoder DP Contest pL

(玩遊戲問題、進階版題目點此)

 

旅行推銷員問題

(位元 DP dp[i][mask])

部分經典題型

部分經典題型

單調隊列優化 DP

(烏龜疊疊樂簡單版)

 

數位 DP

 

輪廓線 DP

 

位元 DP

部分經典題型

DAG 上 DP

 

經典二分搜題 + DP

 

二分搜 + DP

(2021 初選 pB)

 

 

Made with Slides.com