题解:AT_arc160_f [ARC160F] Count Sorted Arrays
posted on 2024-10-10 14:09:56 | under | source
正难则反,已占位置构成若干连续段,考虑为最后一个人选择某连续段的位置 \(pos\),那么可以发现对应的 \(a\) 只能在该连续段中。然后将他删去,拆成两个小连续段且互不影响,构成子问题结构。
于是记 \(f_i,cnt_i\) 表示 \(i\) 个人的连续段的贡献、方案数,转移枚举最后一个人位置 \(j\) 即可:
\(f_i\gets {i-1\choose {j-1}}((i+1)(f_{j-1}cnt_{i-j}+f_{i-j}cnt_{j-1})+cnt_{i-j}cnt_{j-1}(\sum\limits_{k=0}^{j-1} k+\sum\limits_{k=0}^{i-j}k))\)
\(cnt_i\gets {i-1\choose {j-1}}(i+1)cnt_{j-1}cnt_{i-j}\)
其中,组合数表示为左右两部分分配编号,是多重排列;然后 \(i+1\) 是最后一个人的 \((a,b)\) 的方案,\(\sum\) 部分是他 \((a,b)\) 的总贡献。然后 \(f\) 的转移是分别计算 \([1,j-1]\)、\([j+1,i]\) 和最后一个人的贡献。

浙公网安备 33010602011771号