正睿 2018 提高组十连测 Day2 T2 B

题目链接
http://www.zhengruioi.com/contest/84/problem/318

题解写的比较清楚,直接扒过来了。

B

算法 1

直接按题意枚举,动态规划或是记忆化搜索。

时间复杂度 \(O(a^n)\)。期望得分 \(30\) 分。

算法 2

考虑第二个测试点。只需要记录当前还有多少个位置为 \(1\) 就行了。

时间复杂度 \(O(n)\)。期望得分 \(10\) 分。加上算法 1,期望得分 \(40\) 分。

算法 3

答案可以看成是每一个元素被选中的次数之和。由于期望的线性性,我们可以去计算每一个位置被选中的次数的期望。

首先,第一个元素一定被减了 \(a_1\) 次。

考虑某一个位置 \(i\),假设当前有 \(c\) 个元素不为 \(0\),那么每个元素被操作的概率都是 \(\frac{1}{c}\)。倘若只关注 \(1\)\(i\) 两个元素,可以发现操作其它元素的时候对它们没有影响,而且它们两个被操作的概率是相等的。于是这个问题就等价与一个只有两个元素的原问题。

因此元素之间是独立的!使用算法 1 中的动态规划就可以知道每个元素对答案的贡献,求和即可。

时间复杂度 \(O(a^2+n)\)。期望得分 \(60\) 分。

算法 4

算法 3 中的动态规划可以看成从 \((a_1, a_i)\) 出发的随机游走,每次随机一个方向将减 \(1\),直到走到坐标轴上为止。若停在 \((0,a)\),对答案的贡献为 \(a_i-a\)。若停在 \((a,0)\),对答案的贡献为 \(a_i\)

于是可以直接写出贡献的式子。(这里\(a_i-1+i\)的原因是最后一步只能是\(a_1-1\))

\[\sum_{i=0}^{a_i-1}i*\frac{a_1-1+i\choose i}{2^{a_1+i}}+a_i(1-\sum_{i=0}^{a_i-1}\frac{a_1-1+i\choose i}{2^{a_1+i}}) \]

前面那项是停留在 \((0,a)\) 的答案,后面那项是停留在 \((a,0)\) 的答案。

\(a_i\) 增加 \(1\) 的时候,变化的贡献可以在 \(O(1)\) 的时间内得到。(前后都是只增加了一项)

时间复杂度 \(O(a+n)\)。期望得分 \(100\) 分。

posted @ 2018-11-25 11:53  Creed-qwq  阅读(224)  评论(0编辑  收藏  举报