P10005 [集训队互测 2023] 基础寄术练习题
P10005 [集训队互测 2023] 基础寄术练习题
首先可以发现这个题目要求的计数对象非常诡异,我们考虑利用组合意义进行转化。
我们构造如下的一个组合模型:
- 假设我们有 \(n\) 种球,每种球有 \(a_i\) 个,现在将这些球排成一列,要求第 \(i\) 种球最后一次出现位置在第 \(i+1\) 种球的出现位置之前,求合法的概率是多少。
我们考虑从后往前放球,放第 \(i\) 种球的时候空位应该有 \(s_i\) 个。那么可以推出对于当前这一步合法的概率是 \(\dfrac{a_i}{s_i}\)。所以总的合法概率就是 \(\prod\limits_{i=1}^n\dfrac{a_i}{s_i}\)。这样的话我们就构造出了一个分母上前缀和的积。
\(k=1\)
然后我们来看 \(k=1\) 的部分,此时我们要求 \(\sum\limits_a \prod\limits_{i=1}^n \dfrac{1}{s_i}\)。现在考虑如果我们给定了 \(a_i\) 中出现的数字构成的无序集合 \(A\),那么对于任何一种球的序列满足每种球的出现次数集合与 \(A\) 完全一致,它一定对应唯一的一个 \(a_i\) 的排列。
考虑这有什么用,上面的式子 \(\prod\limits_{i=1}^n\dfrac{a_i}{s_i}\) 告诉我们一个固定的 \(a_i\) 对应的合法球序列概率,而我们要求的实际上是 \(\sum\limits_a \prod\limits_{i=1}^n \dfrac{a_i}{s_i}\),也就是给出一个球序列,它是某个 \(a_i\) 对应的合法序列的概率总和;根据上面的分析,显然这个答案是 \(1\),因此我们有 \(\sum\limits_a \prod\limits_{i=1}^n \dfrac{a_i}{s_i}=1\),于是可以得到一个关键结论:
我们做一个背包即可求出答案,复杂度 \(O(n^2)\)。
\(k=2\)
此时我们需要求出上面答案乘上 \(a_1\) 的结果。很显然结论不能再用了,但是我们依然可以利用上面的模型去求解。
我们考虑有没有什么别的方法去计算这个概率,考虑现在我们还是已知集合 \(A\),并且我们确定了 \(a_1\),考虑合法的概率是多少。此时合法的条件只有一个:出现了 \(a_1\) 次的球的最后一次出现位置是最靠前的。
考虑容斥,枚举一个 \(A\) 的子集 \(B\) 表示出现次数在 \(B\) 集合中的球的最后一次出现位置在 \(1\) 之前,那么可以推出答案的方案数为:
化简一下可以得到:
而我们要求的是概率,所以要除掉方案数,也就是前面的部分。因此一个集合 \(B\) 的贡献实际上只有 \(\dfrac{a_1}{S_B+a_1}\),同时它的容斥系数也是显然的,应该是 \((-1)^{|B|}\)。
所以我们依然考虑用背包 dp 集合 \(A\),设 \(f_{i,j,s,0/1}\) 表示当前处理了 \([1,i]\) 的数,选入 \(A\) 集合的有 \(j\) 个,\(S_B+a_1=s\),\(a_1\) 是否被钦定的方案数。转移的时候考虑当前数的决策,有不放 / 放入 \(B\) / 放入 \(A-B\) / 钦定为 \(a_1\) 四种可能,分别转移即可。注意不要忘了除以 \(a_i\) 才是最终的答案。
总复杂度为 \(O(n^4)\),可以通过。 事实上 \(k=1\) 也可以用这个方法求解,只需要在钦定 \(a_1\) 的时候少乘一个 \(a_1\) 即可。

浙公网安备 33010602011771号