题解 ARC139D【Priority Queue 2】
problem
给定 \(n,m,k,x\),给定了一个有 \(n\) 个元素的可重集合 \(a_i\in [1,m]\),会进行 \(k\) 次如下操作:选择一个数 \(y\in[1,m]\) 加到 \(a\) 中,并把 \(a\) 中第 \(x\) 小的元素删除。
有 \(m^k\) 种情况,对于每种情况的价值定义为最后 \(a\) 集合的和,对于所有情况价值求和。
- \(1\le n,m,k\le 2000\),\(1\le x\le n+1\),\(1\le a_i\le m\)
solution \(O(n^3)\)
如果在删数的时候,不删掉它,而是给个标记,数 kth 的时候跳过,那么完成之后排序会发现打标记的地方是连续段,而且可以算出来。
考虑将最终状态拿出来,相同数字的放一起,强制将原来有的数放前面。然后 DP \(f/g(i,j)\) 表示放了 \(i\) 个数,填到数字 \(j\),然后分别算出方案数和总和。
solution $O(n^2)
\(a_i\) 是最终序列:\(*=\textrm E[\sum_i a_i]=\boxed{\sum_x x\times \textrm E[\sum_i[a_i=x]]=\sum_x \textrm E[\sum_i[a_i\geq x]]}\) 这样就只用算 \(\geq x\) 的。
只看 \(a_i\geq x\) 的。假设当前有 \(c\) 个数满足 \(a_i\geq x\)。考虑操作:
- 选择一个数 \(y\in[1,m]\) 加到 \(a\) 中:有 \(p=1-\frac{x-1}{m}\) 的概率,使得 \(c\) 加一。
- 并把 \(a\) 中第 \(x\) 小的元素删除:当 \(n+1-c\geq X\) 时,删掉 \(<x\) 的一个数。所以,当 \(c>n+1-X\) 时,使得 \(c\) 减一。
初始时的 \(c\) 叫做 \(c_0\),\(lim=n+1-X\)。枚举这 \(k\) 次操作中我们进行了 \(i\) 次加一,考虑最终的 \(c_k\):
- 当 \(c_0\leq lim\) 时,\(lim\) 就像一个上界顶住了 \(c\),所以 \(c_k=\min(lim,c_0+i)\)。
- 当 \(c_0>lim\) 时,加操作无用,考虑 \(k-i\) 个减,所以 \(c_k=\max(lim,c_0-(k-i))\)。
发生 \(i\) 次加一的概率是:\(p^i(1-p)^{k-i}\binom k i\),乘上最终的 \(c_k\) 即可,全部加起来。
code
solution 1:https://atcoder.jp/contests/arc139/submissions/41154363
solution 2:https://atcoder.jp/contests/arc139/submissions/41156198(看了题解)
\(e^x=exp(x)=\sum_i \frac{x^i}{i!}\)
本文来自博客园,作者:caijianhong,转载请注明原文链接:https://www.cnblogs.com/caijianhong/p/solution-arc139d.html