1. 程式人生 > 其它 >AHOI 2022 做題記錄

AHOI 2022 做題記錄

T1 P8338 [AHOI2022] 排列

AC

T2 P8339 [AHOI2022] 鑰匙

AC

T3 P8340 [AHOI2022] 山河重整

首先有一個很顯然的 \(O(n^2)\) dp:

\(f_{i,j}\) 為使用了前 \(i\) 個數字,目前最多可以湊出字首 \([1,j]\) 的方案數,轉移只需要新加入的區間拼的上就好了。

實際上,轉移時的限制可以寫作“集合中 \(\leqslant k\) 的數之和要 \(\geqslant k\)”。於是我們考慮容斥,我們找到第一個不滿足的位置 \(p\) 進行轉移,並乘上 \(-1\) 的係數。

此時有一個很好的性質,由於 \(p\)

之前的位置都滿足性質,所以小於等於 \(p-1\) 的數之和一定是 \(p-1\)

那麼就可以把 dp 變成一維的,令 \(f_i\)\([1,i]\) 內的數,和恰好為 \(i\) 的方案的容斥係數之和。它的計算可以用正常的整數拆分減去 \(f\) 帶來的容斥轉移。

這一型別的 dp 有一個很經典的優化到揹包的方法,我們可以類似 P6189 [NOI Online #1 入門組] 跑步,一次要麼加入一個欽定不滿足的數字,要麼給全域性加若干次一,可以發現只會加入至多根號個數字,所以做這個 dp 的複雜度是 \(O(n\sqrt n)\) 的。

但是我們在轉移前必須把轉移過來的 dp 值提前計算完成,可以使用類似半線上卷積,每次先求出前一半的 dp 值,再轉移給後一半。

複雜度是 \(n\sqrt n+\frac{n\sqrt n}{2}+\frac{n\sqrt n}{4}+\cdots=O(n\sqrt n)\) 的。

AC

T4 P8341 [AHOI2022] 回憶