P12558 [UOI 2024] Heroes and Monsters 题解
:::::info[题目基本信息]
考察:动态规划 DP(NOI/NOI+/CTSC)。
题目简介:
给定
数据范围:
-
1\le n\le 5000 -
\forall i\in[1,n],1\le a_i,b_i\le 2n -
\forall i,j\in[1,n],a_i\ne b_j -
\forall i,j\in[1,n],i\ne j,a_i\ne a_j -
\forall i,j\in[1,n],i\ne j,b_i\ne b_j -
1\le q\le n+1 -
0\le l\le r\le n
时间限制:1.5s。
空间限制:1GB。
:::::
计数题大部分时候会经历转化问题、发掘性质,判定合法,计算答案四个过程(不要把这四个过程完全割裂,有时算答案时也会出现转化,转化时顺便发掘了性质和判定,需要巧妙地选择进行哪一步),虽然一般这前三个部分一般不难但也许会给我们做 DP 和计数提供思考方向。一个好的例子是 CF2150D,在这道题中这三个过程体现得淋漓尽致。
我们先来暴力。
Part 1:转化问题:
这一步还是比较关键的。
贪心地想,如果
那么我们先设
-
\forall i\in[1,|S|],a_{S_i}>b_i -
\forall i\in[1,|S^{-1}|],a_{S^{-1}_i}<b_{i+|S|} Part 3:判定合法:
根据贪心策略易证,上面的条件就是
S 合法的充要条件。Part 4:计算答案:
重头戏来了。
考虑枚举|S| ,设f_{i,j} 为考虑到第i 个数,有j 个数在S 中的合法S 方案数,根据上述容易得到转移方程:f_{i,j}=[a_i>b_j]f_{i-1,j-1}+[a_i<b_{|S|+i-j}]f_{i-1,j} 这时
f_{n,|S|} 就是ans_{|S|} ,对它求前缀和就可以做到\Theta(n^3+q) ,过不了,考虑优化。不要把这四个过程完全割裂,有时算答案时也会出现转化,转化时顺便发掘了性质和判定,需要巧妙地选择进行哪一步。
Part 1:转化问题:
由于原条件中含有
-
\forall i\in[1,|S|],a_{S_i}>b_i -
\forall i\in[1,|S^{-1}|],a_{S^{-1}_{|S^{-1}|-i+1}}<b_{n-i+1}
Part 4:计算答案:
我们现在消去了
更加具体地,对前缀 DP 时设
同样的,设出
现在,我们求出了
Part 1:转化问题:
显然我们不能直接找一个位置
由于现在
-
\forall i\in[1,|S|],a_{S_{|S|-i+1}}>b_{|S|-i+1} -
\forall i\in[1,|S^{-1}|],a_{S^{-1}_i}<b_{i+|S|}
容易得到位置
Part 2:发掘性质:
我们注意到当
-
\forall i\in[1,k]\cap S^{-1},a_i<b_{|S|} -
\forall i\in[k+1,n]\cap S,a_i>b_{|S|}
所以我们得到
Part 4:计算答案:
最终,我们终于要计算
容易得到:
其中,所有上界和下界均为了保证
然后做个前缀和就做完了。
时间复杂度为
code