2024.7.2 集訓

huangkxQwQ發表於2024-07-02

### 數位 DP

1. 記錄:1. 是否頂上限;2. 是否當前填了的都是前導 $0$;3. 當前位是否是從左往右數第一位。(2 和 3 是兩種做法,2 是在 Query 裡只呼叫一次 DFS,3 是在 Query 裡列舉第一個非 $0$ 位呼叫多次 DFS)。
2. 記憶化的陣列可以不用記所有內容。
3. 注意 DFS 返回時要返回 res,而不是記憶化的陣列裡的內容,因為記憶化的陣列記的不是所有內容(如果這樣寫的話)。
4. 注意特判。比如左邊界 $- 1$ 變成了 $- 1$。還有 $0$ 的情況。
5. 注意算的是 $[1, n]$ 的答案還是 $[0, n]$ 的答案。
6. 注意給記憶化的陣列賦初值為 $- 1$,注意要不要多次賦初值(注意在哪裡賦初值)。
7. 可以用 $[0, 9]$ 以外的數來表示之前沒填的數位(前導 $0$),如用 $10$。一般不用 $- 1$,因為陣列的下標沒有 $- 1$(?)。
8. 在 Query 裡列舉第一個非 $0$ 位的寫法中,注意不是每次都是一來就頂上限,而是隻有 i == pos 時才一開始就頂上線。

寫法:

1. 記錄填了的是否都是前導 $0$,在 Query 裡呼叫一次 DFS。
2. 記錄當前位是不是第一個非 $0$ 位,在 Query 裡列舉第一個非 $0$ 位,多次呼叫 $DFS$。
######
1. 記憶化的陣列只記錄一部分內容。
2. 記憶化的陣列記錄全部內容。

### 貪心

可以考慮從之前的某個假設最優的情況開始分析。如:例4:大神排隊。

不確定貪心的正確性時,可以能寫暴力的寫暴力,暴力過不了的部分再用貪心。(先暴力後貪心)。

### 狀態壓縮

可以把 max(a, b) 或 min(a, b) 的結果用 0 或 1 來表示(0 表示是 a,1 表示是 b)。如:P1648 看守。