期望
看了几个课件,挑着比较有意思的写了。
1.
倒推期望,设\(dp[i][j]\)为已经有\(i\)行\(j\)列有至少一个被染色的,还需要染的次数的期望。
那么有\(dp[n][n]=0\),倒推到初始状态即可。
有:
所以:
这样我们\(O(n^2)\)地\(dp\)就可以了。
2.
先考虑黑点的贡献。
设\(dp[i]\)表示从\(i\)开始走到结束经过黑点的期望个数。
有:
这样转移出现了环。
发现可以不用高斯消元而系数递推。
得到:
然后我们解一下得到:
这样可以叶子向根进行系数递推了。
复杂度是线性的。
然后我们考虑白色点的贡献。
其实就是经过一个白点的概率。
对于每一个白点,我们去掉其所有儿子并把它染黑,其他点全都染白,这样转化成和刚才一样的问题了。再利用一下系数递推时候求出的\(k,b\)就可以线性的统计这一部分的答案了。
3.
这个题的话。
考虑把链变成圆,加一个点为\(n+1\),那么就相当于是从\(n+1\)出发,选择顺逆时针,在选择一个点作为起点,不能够走回\(n+1\)这个点的方案数。
那么总方案是\((2(n+1))^m\),而每一个位置被占据的概率是相同的,是\(\frac{m}{n+1}\)。
那么答案就是:\((2(n+1))\frac{n+1-m}{n+1}\)。
4.
我们发现这\(m\)个人很讨厌。我们假设\(1\)在\(1\)位置,那么最终答案乘上\(2^n\)即可。
然后考虑每次和\(1\)所在区间合并的区间总共有\(n\)个。
这些区间中最小的那个数将会和\(1\)对战,我们要求这些区间的最小数没有任何一个是\(m\)中的某个人。
这样我们求:\(f(S)\)表示\(S\)集合所代表区间中的所有人的最小值是\(m\)个人之一,剩下的区间生死未卜的方案数。
我们把\(m\)个人排个序然后从大到小依次做\(dp\)。
设\(dp[i][S]\)为前\(i\)大的人中集合\(S\)的区间中的最小值必然是\(m\)个人之一,而剩下的区间生死未卜的方案数。
枚举两种转移。
1.不放入集合中。
2.加入新出现的集合作为最小值。
转移就是:
这样我们就得到了:
考虑用\(f(S)\)来求答案。
那么就有:
5.
设\(dp[i][j]\)为前\(i\)个数,第\(i\)个数为\(j\)的方案数。
相当于容斥掉一整段全都是\(j\)的长度过于长的方案。
那么发现\(a_i\)相同的\(i\)可以一起转移,复杂度就变成\(O(n^2)\)的了。
6.
相当于求出\(nk\)个数中选择\(x\)个数(\(x\ equiv\ r(mod\ k)\)),的方案。
\(dp[i][j]\)为\(i\)个数中选了\(x\)个数,满足\(x\ equiv j(mod\ k)\)的方案数。
发现可以用矩阵优化这个\(dp\),那么矩阵快速幂一下就可以了。
7.
这个感觉是挺常见的计数题的。
对于\(k=1\),\(ans=n\)。
如果\(k>1\)。
我们考虑一个长度为\(l\)的路径,那么其对答案的贡献是\(\binom{l-2}{k-2}\)。
这样我们先求一下数上长度为\(i\)的方案数,点分治+\(FFT\)就可以了,设其生成函数为\(G(x)=\sum\limits_{i=1}^{n}g(i)x^i\)
那么我们设答案的生成函数是\(F(x)=\sum\limits_{i=1}^{n}f(i)x^i\)。
这样就有\(f(i)=\sum\limits_{j=i}^{n}g(j)\binom{j-2}{i-2}\)
拆一下发现是卷积形式。
再做一次\(FFT\)就可以了。