「題解」[SDOI2011]攔截導彈 & [HEOI2016/TJOI2016]序列
阿新 • • 發佈:2022-02-12
(因為是一類題寫成一篇題解了)
[SDOI2011]攔截導彈
link
\(dp_i=\max_{j=1}^{i-1}\{dp_j[h_j\geqslant h_i,v_j\geqslant v_i]\}+1\)
考慮只有 \(h_i\) 或 \(v_i\) 其中一個限制時,果斷用樹狀陣列/線段樹(其實 cdq 也可以)維護。多加一個限制,剛好 \(\{i,h_i,v_i\}\) 構成了三元組,發現在進行三維偏序時做 dp 即可。
程式碼有幾個細節:
- 先跑 \(cdq(l,mid)\),再進行 dp,然後跑 \(cdq(mid+1)\)
- 初始值可以在 \(l=r\) 時賦,也可以在進行 cdq 前賦。兩種都挺方便的。
[HEOI2016/TJOI2016]序列
link
令 \(mn_i\) 為 \(i\) 能取到的最小值,\(mx_i\) 為最大值,\(a_i\) 為初始值。
定一個規則貪心地選擇是很困難的。\(dp_i=\max\{dp_j+1[mn_i\geqslant a_j,a_i\geqslant mx_j]\}\)。
乍一看是三個限制(\(mn,a,mx\)),但是每次只用得到兩個。所以還是像上一題一樣做即可。但是此題需要將一個拆成轉移點(\((i,a,mx)\))和答案點(\((i,mn,a)\))。