概率计数选做

[ZJOI2015]地震后的幻想乡

传送门

  • 引理: n n n [ 0 , 1 ] [0,1] [0,1] 之间的随机变量,第 k k k 小值的期望是 k n + 1 \dfrac{k}{n+1} n+1k

    证明:引入第 n + 1 n+1 n+1 个随机变量,按大小关系排列的取值有 ( n + 1 ) ! (n+1)! (n+1)! 种,第 n + 1 n+1 n+1 个变量小于等于 k k k 小值的方案数有 k × n ! k\times n! k×n! 种,概率为 k n + 1 \dfrac{k}{n+1} n+1k,即 k k k 小值的期望为 k n + 1 \dfrac{k}{n+1} n+1k

知道了这个引理之后问题转化为求加入第 i ∈ [ n − 1 , m ] i\in[n-1,m] i[n1,m] 小的边之后原图恰好连通的方案数。恰好连通不太好办,考虑将其变成 加入第 i − 1 i-1 i1 条边后不连通方案数 - 加入第 i i i 条边后不连通方案数。

由于 n n n 很小,考虑状压。设 f [ s ] [ i ] f[s][i] f[s][i] 表示在点集 s s s 中加入 i i i 条边不连通方案数, g [ s ] [ i ] g[s][i] g[s][i] 表示连通方案数,容易发现若 s s s 中有 d s d_s ds 条边,有 f [ s ] [ i ] + g [ s ] [ i ] = C d s i f[s][i]+g[s][i]=C_{d_s}^i f[s][i]+g[s][i]=Cdsi,那么只需要求 f [ s ] [ i ] f[s][i] f[s][i] 即可。钦定一个 s s s 中的点 x x x,枚举 x x x 所在的连通块 t t t,当前不连通图便由 t t t t t t s s s 中补集里的一些边组成,即 f [ s ] [ i ] = ∑ x ∈ t ⫋ s ∑ j = 1 i g [ t ] [ j ] × C d s   x o r   t i − j f[s][i]=\sum\limits_{x\in t\subsetneqq s}\sum\limits_{j=1}^i g[t][j]\times C_{d_{s\ xor\ t}}^{i-j} f[s][i]=xtsj=1ig[t][j]×Cds xor tij,由于 x x x 一定属于 t t t,可以保证计数不重不漏。

Slime and Sequences (Easy Version)

传送门

前置芝士:欧拉数 ⟨ n k ⟩ \left\langle\begin{matrix}n\\k\end{matrix}\right\rangle nk 为长度为 n n n 的所有排列 p p p ∑ i = 1 n − 1 [ p i < p i + 1 ] = k \sum\limits_{i=1}^{n-1}[p_i<p_{i+1}]=k i=1n1[pi<pi+1]=k p p p 的个数。求法

非常神仙的转化:从小到大枚举每个数 i i i,把 i i i 出现的位置从大到小放进排列里,这样每个好序列和排列之间就构成了一个双射,且排列满足只有 i i i i + 1 i+1 i+1 的交界处才有 p j < p j + 1 p_j<p_{j+1} pj<pj+1

考虑怎么求 j j j 的答案,每个位置 i i i 存在贡献需要满足前 i i i 个数中有 j − 1 j-1 j1 p k < p k + 1 p_k<p_{k+1} pk<pk+1 的位置,后面由于每个排列一定对应一个好序列,可以随便填,于是 a n s j = ∑ i = 1 n ⟨ n j − 1 ⟩ n ! i ! ans_j=\sum\limits_{i=1}^n \left\langle\begin{matrix}n\\j-1\end{matrix}\right\rangle\dfrac{n!}{i!} ansj=i=1nnj1i!n!

Beautiful Bracket Sequence (hard version)

传送门

对于一个确定的括号序列,设 a i a_i ai 为前缀左括号个数, b i b_i bi 为后缀右括号个数,它的权值就是 max ⁡ { min ⁡ { a i , b i + 1 } } \max\{\min\{a_i,b_{i+1}\}\} max{min{ai,bi+1}},必然有且仅有一个位置 a i = b i + 1 a_i=b_{i+1} ai=bi+1,以这个位置为分界线计数可以保证不重不漏。

假设位置 p p p 前面有 a a a 个左括号和 c c c 个问号,后面有 b b b 个右括号和 d d d 个问号,枚举左边有多少问号变成左括号即可求解: a n s p = ∑ i = 0 c ( a + i )   C c i C d a + i − b ans_p=\sum\limits_{i=0}^c (a+i)\ C_c^iC_d^{a+i-b} ansp=i=0c(a+i) CciCda+ib。朴素求解是 O ( n 2 ) O(n^2) O(n2) 的,把括号拆开变形,用范德蒙德卷积可以把柿子化成 a C c + d d − a + b + c C c + d − 1 b + d − a − 1 aC_{c+d}^{d-a+b}+cC_{c+d-1}^{b+d-a-1} aCc+dda+b+cCc+d1b+da1,即可 O ( n ) O(n) O(n) 求解。

Bracket Insertion

传送门

套路地,把左括号看做 + 1 +1 +1,右括号看做 − 1 -1 1,由于每次插入一对括号,最终和一定为 0 0 0,即合法只需要保证任意位置前缀和非负。

那么插入括号的过程可以看做维护一个可重集的过程,初始 S = { 0 } S=\{0\} S={0},每次随机选出一个数 x x x,有 p p p 的概率替换为 { x , x , x + 1 } \{x,x,x+1\} {x,x,x+1} 1 − p 1-p 1p 的概率替换为 { x , x , x − 1 } \{x,x,x-1\} {x,x,x1}。设 f [ n ] [ x ] f[n][x] f[n][x] 为初始集合里有 x x x,经过 n n n 次操作的方案数,枚举第一次进行哪种操作以及产生的两种数各被选择几次:

f [ n ] [ x ] = p ∑ i = 0 n − 1 ∑ j = 0 n − i − 1 C n − 1 i C n − i − 1 j f [ i ] [ x ] f [ n − i − j − 1 ] [ x ] f [ j ] [ x + 1 ] + ( 1 − p ) ∑ i = 0 n − 1 ∑ j = 0 n − i − 1 C n − 1 i C n − i − 1 j f [ i ] [ x ] f [ n − i − j − 1 ] [ x ] f [ j ] [ x − 1 ] f[n][x]=p\sum\limits_{i=0}^{n-1}\sum\limits_{j=0}^{n-i-1}C_{n-1}^iC_{n-i-1}^jf[i][x]f[n-i-j-1][x]f[j][x+1]+(1-p)\sum\limits_{i=0}^{n-1}\sum\limits_{j=0}^{n-i-1}C_{n-1}^iC_{n-i-1}^jf[i][x]f[n-i-j-1][x]f[j][x-1] f[n][x]=pi=0n1j=0ni1Cn1iCni1jf[i][x]f[nij1][x]f[j][x+1]+(1p)i=0n1j=0ni1Cn1iCni1jf[i][x]f[nij1][x]f[j][x1]

j j j 提到外面并提取公因式:

f [ n ] [ x ] = ∑ j = 0 n − 1 C n − 1 j ( p × f [ j ] [ x + 1 ] + ( 1 − p ) × f [ j ] [ x − 1 ] ) ( ∑ i = 0 n − j − 1 C n − j − 1 i f [ i ] [ x ] f [ n − j − 1 − i ] [ x ] ) f[n][x]=\sum\limits_{j=0}^{n-1}C_{n-1}^j(p\times f[j][x+1]+(1-p)\times f[j][x-1])(\sum\limits_{i=0}^{n-j-1}C_{n-j-1}^i f[i][x]f[n-j-1-i][x]) f[n][x]=j=0n1Cn1j(p×f[j][x+1]+(1p)×f[j][x1])(i=0nj1Cnj1if[i][x]f[nj1i][x])

最后一个括号显然可以预处理,时间复杂度 O ( n 3 ) O(n^3) O(n3)

每次插入一对括号,于是总方案数是 ∏ i = 1 n ( 2 i − 1 ) \prod\limits_{i=1}^n (2i-1) i=1n(2i1),除一下就是概率。

常数太大 C++14 被卡常/oh

[CEOI2016] kangaroo

传送门

不会蓝色 dp /hsh

似乎叫排列 dp 的一种神秘思想,用于一些求排列数的问题,通常形如 f [ i ] [ j ] f[i][j] f[i][j] 表示前 i i i 个数形成 j j j 个连续段的方案数。

原题即求满足 ∀ i , p i > m a x ( p i − 1 , p i + 1 ) ∨ p i < m i n ( p i − 1 , p i + 1 ) \forall i,p_i>max(p_{i-1},p_{i+1})\lor p_i<min(p_{i-1},p_{i+1}) i,pi>max(pi1,pi+1)pi<min(pi1,pi+1)(限制 A)且开头为 s s s 结尾为 t t t 的排列数,考虑加入 i i i i ≠ s i\ne s i=s i ≠ t i\ne t i=t):

  • 合并两个段,方案数 f [ i − 1 ] [ j + 1 ] × j f[i-1][j+1]\times j f[i1][j+1]×j

  • 新建一个段,注意若 s s s t t t 已经加入,那么它不能放在开头结尾,方案数 f [ i − 1 ] [ j − 1 ] × ( j − [ i > s ] − [ i > t ] ) f[i-1][j-1]\times(j-[i>s]-[i>t]) f[i1][j1]×(j[i>s][i>t])

  • 加入一个段,显然不满足限制 A,不合法

时间复杂度 O ( n 2 ) O(n^2) O(n2)

Weighted Increasing Subsequences

传送门

考虑每个位置 i i i 被记入贡献的次数,即 i i i 所在上升子序列末尾位置 + 1 +1 +1 的后缀最大值大于 a i a_i ai 的方案数怎么计算。记满足 a j > a i a_j>a_i aj>ai 的最大 j j j 所在位置为 p p p,这个 p p p 一定不能在上升子序列里,那么贡献就是含有 i i i 且不含有 p p p 的上升子序列数。

含有 i i i 的限制很好计算,设 f [ i ] f[i] f[i] 为以 i i i 为结尾的上升子序列数, g [ i ] g[i] g[i] 为以 i i i 为开头的上升子序列数,树状数组维护 dp 一下就行。

对于不含 p p p 的限制考虑正难则反,问题转化为计算以 i i i 开头以 p p p 结尾的上升子序列数。

显然所有 p p p 都是严格后缀最大值,把它们提出来称为序列 b b b,那么 b i b_i bi 管辖的就是 a j ∈ ( b i + 1 , b i ] a_j\in(b_{i+1},b_i] aj(bi+1,bi] 的所有 j j j。那么把 a a a 从大到小排序,每找到一个 b b b 中的元素就把树状数组清空重新做即可。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值