1. 程式人生 > 其它 >「題解」[SDOI2011]攔截導彈 & [HEOI2016/TJOI2016]序列

「題解」[SDOI2011]攔截導彈 & [HEOI2016/TJOI2016]序列

(因為是一類題寫成一篇題解了)


[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 即可。
程式碼有幾個細節:

  1. 先跑 \(cdq(l,mid)\),再進行 dp,然後跑 \(cdq(mid+1)\)
  2. 初始值可以在 \(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)\))。