组合计数练习题

UOJ422 小z的礼物

考虑min-max容斥:

max ⁡ ( S ) = ∑ T ⊆ S ( − 1 ) ∣ T ∣ + 1 min ⁡ ( T ) \max (S) = \sum_{T\subseteq S} (-1)^{|T|+1} \min (T) max(S)=TS(1)T+1min(T)

对希望得到的物品的每一个子集,求出期望最早什么时候子集里至少有一个物品被拿到了,就能算出答案。

设包含了至少一个这个子集内的物品的相邻的格子对的数量是 a a a,所有的相邻的格子对的数量是 b b b,那么这个期望值就是 b a b\over a ab a a a是一个定值; b b b则可以看做(子集内每一个物品包含它的相邻格子对数量的和)-(同时包含了子集内的两个物品的相邻格子对的数量)。

f S , t f_{S,t} fS,t表示上一列选了的格子的集合是 S S S,之前选过的格子的(子集内每一个物品包含它的相邻格子对数量的和)-(同时包含了子集内的两个物品的相邻格子对的数量)为 t t t,所有方案的容斥系数的和。用类似轮廓线dp的方法转移,就可以做到 O ( 2 n n 2 m 2 ) O(2^n n^2m^2) O(2nn2m2)的复杂度。

Code

LOJ2320「清华集训 2017」生成树计数

把原题的式子换一个表达的方式:把每个连通块看做一个点,设 d i d_i di为每个点的度数,则
v a l ( T ) = ( ∑ i = 1 n d i m ) ( ∏ i = 1 n d i m ) ( ∏ i = 1 n a i d i ) val (T) = (\sum_{i=1}^n d_i^m) (\prod_{i=1}^n d_i^m )(\prod_{i=1}^n a_i^{d_i}) val(T)=(i=1ndim)(i=1ndim)(i=1naidi)

因为式子里面有度数,所以考虑用prufer序列来计数。枚举每一个点在prufer序列中出现的次数 k i k_i ki,得到

A n s = ∑ k 1 + k 2 + ⋯ + k n = n − 2 ( n − 2 ) ! k 1 ! k 2 ! ⋯ k n ! ⋅ ∑ i = 1 n ( k i + 1 ) 2 m a i k i + 1 ∏ j ≠ i ( k j + 1 ) m a j k j + 1 Ans = \sum_{k_1+k_2+\cdots +k_n=n-2} {(n-2)!\over k_1!k_2!\cdots k_n!} \cdot \sum_{i=1}^n (k_i+1)^{2m}a_i^{k_i+1} \prod_{j\neq i} (k_j+1)^ma_j^{k_j+1} Ans=k1+k2++kn=n2k1!k2!kn!(n2)!i=1n(ki+1)2maiki+1j=i(kj+1)majkj+1

A i ( x ) = ∑ k = 0 ∞ a i k + 1 ( k + 1 ) m k ! x k B i ( x ) = ∑ k = 0 ∞ a i k + 1 ( k + 1 ) 2 m k ! x k A_i(x) = \sum_{k=0}^\infty {a_i^{k+1}(k+1)^m\over k!} x^k\\ B_i(x) = \sum_{k=0}^\infty {a_i^{k+1}(k+1)^{2m} \over k!}x^k Ai(x)=k=0k!aik+1(k+1)mxkBi(x)=k=0k!aik+1(k+1)2mxk

A n s = ( n − 2 ) ! ∑ i = 1 n ( B i ( x ) ∏ j ≠ i A j ( x ) ) [ x n − 2 ] Ans= (n-2)!\sum_{i=1}^n (B_i(x)\prod_{j\neq i} A_j(x) )[x^{n-2}] Ans=(n2)!i=1n(Bi(x)j=iAj(x))[xn2]

因为 A i ( x ) A_i(x) Ai(x)里面有指数为 k + 1 k+1 k+1,还有 x k k ! x^k \over k! k!x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值