容斥 组合计数

13 篇文章 0 订阅
8 篇文章 0 订阅
双射

单射 :不存在A中有两个元素 和 B 中同一个元素对应
满射 :B中每一个元素都在A中有对应的元素
单射 + 满射 = 双射
双射一定满足 ∣ A ∣  ⁣ =  ⁣ ∣ B ∣ |A|\!=\!|B| A=B

Lucas定理

L u c a s Lucas Lucas定理是用来求 c ( n , m ) m o d   p c(n,m) mod\,p c(n,m)modp的值. ( ( (p是素数 ) ) )
表达式如下:
C ( n , m ) % p = C ( n / p , m / p ) ∗ C ( n % p , m % p ) % p C(n,m)\%p=C(n/p,m/p)*C(n\%p,m\%p)\%p C(n,m)%p=C(n/p,m/p)C(n%p,m%p)%p
可递归实现,时间复杂度: O ( p l o g p ( n ) ) O(plog_p(n)) O(plogp(n)),大致可认为是 O ( p l o g n ) O(plogn) O(plogn)

容斥的扩展公式

有集合 S 1 . . . S n S_1... S_n S1...Sn ⋃ i = 1 n S i \bigcup_{i=1}^nS_i i=1nSi
⋃ i = 1 n S i  ⁣ = ∑ T ∈ S ∣ ⋂ i ∈ T S i ∣ ∗ ( − 1 ) ∣ T ∣ − 1 \bigcup_{i=1}^nS_i \!= \sum_{T\in S}|\bigcap_{i\in T}S_i|*(-1)^{|T|-1} i=1nSi=TSiTSi(1)T1
小练习
n n n个整数变量 x i x_i xi满足 0  ⁣ ≤  ⁣ x i  ⁣ ≤  ⁣ c i 0\!\leq\!x_i\!\leq\! c_i 0xici
x x x的和等于 m m m的方案数

n ∗ m  ⁣ ≤  ⁣ 1 0 6 n*m\!\leq\!10^6 nm106
n  ⁣ ≤  ⁣ 20 , m  ⁣ ≤  ⁣ 1 0 9 n\!\leq\!20,m\!\leq\!10^9 n20,m109

Min_Max容斥

有时 m a x max max的期望非常不好算,但是 m i n min min的期望很好算,那么就可以把求 m a x max max的期望转化成求 m i n min min的期望
m a x ( a , b ) = a + b − m i n ( a , b ) max(a,b)=a+b-min(a,b) max(a,b)=a+bmin(a,b)
m a x ( S ) = ∑ r ⊆ S ( − 1 ) ∣ T ∣ − 1 m i n ( T ) max(S)=\sum_{r\subseteq S}(-1)^{|T|-1}min(T) max(S)=rS(1)T1min(T)
同样的 E ( m a x ( S ) ) = E ( ∑ r ⊆ S ( − 1 ) ∣ T ∣ − 1 m i n ( T ) ) E(max(S))=E(\sum_{r\subseteq S}(-1)^{|T|-1}min(T)) E(max(S))=E(rS(1)T1min(T))

小练习
n n n种卡片,每一秒都有 p i p_i pi的概率获得第i种卡片,求每张卡片都至少有一张的期望时间
n ≤ 20 n\leq20 n20

第一类斯特林数

s ( n , k ) s(n,k) s(n,k)表示把 n n n个数的排列中有 k k k个环的方案数

递推
考虑第 n n n个数放在了哪里
1. 1. 1.自己成为一个环,方案为 s ( n − 1 , k − 1 ) s(n−1,k−1) s(n1,k1)
2. 2. 2.插入之前的环中,那么一共有 n − 1 n-1 n1的位置,所以方案为 s ( n − 1 , k )  ⁣ ⋅  ⁣ k s(n−1,k)\!\cdot\!k s(n1,k)k
综上
s ( n , k )  ⁣ =  ⁣ s ( n − 1 , k − 1 )  ⁣ +  ⁣ ( n − 1 )  ⁣ ⋅  ⁣ s ( n − 1 , k ) s(n,k)\!=\!s(n-1,k-1)\!+\!(n-1)\!\cdot\! s(n-1,k) s(n,k)=s(n1,k1)+(n1)s(n1,k)

小练习
n n n个人分配到 k k k个圆桌上,圆桌旋转相等的方案数,即只关心每个人左边的人是谁
n , k  ⁣ ≤  ⁣ 1000 n,k\!\leq\!1000 n,k1000
s ( n , k ) = ∑ i = 0 n s ( n − i , k − 1 ) ⋅ ( n − 1 ) ! ( n − i ) ! 1 ( n − 1 ) ! ⋅ s ( n , k ) = ∑ i = 0 n s ( n − i , k − 1 ) ⋅ 1 ( n − i ) ! s(n,k)=\sum_{i=0}^ns(n-i,k-1)\cdot\frac{(n-1)!}{(n-i)!}\\ \frac{1}{(n-1)!}\cdot s(n,k)=\sum_{i=0}^n s(n-i,k-1)\cdot\frac{1}{(n-i)!} s(n,k)=i=0ns(ni,k1)(ni)!(n1)!(n1)!1s(n,k)=i=0ns(ni,k1)(ni)!1
使 f ( n , k ) = ∑ i = 0 n s ( i , k ) i ! 那 么 1 ( n − 1 ) ! s ( n , k )  ⁣ =  ⁣ f ( n − 1 , k − 1 ) 更 新 f ( n , k )  ⁣ =  ⁣ f ( n − 1 , k ) + s ( n , k ) n ! 使f(n,k)=\sum_{i=0}^n\frac{s(i,k)}{i!}\\ 那么\frac{1}{(n-1)!}s(n,k)\!=\!f(n-1,k-1)\\ 更新f(n,k)\!=\!f(n-1,k)+\frac{s(n,k)}{n!} 使f(n,k)=i=0ni!s(i,k)(n1)!1s(n,k)=f(n1,k1)f(n,k)=f(n1,k)+n!s(n,k)

第二类斯特林数

S ( n , m ) S(n,m) S(n,m)表示把 n n n个不同的球放到 m m m个相同的盒子里,且不允许盒子为空的方案数
S S S为第二类斯特灵数

递推:
考虑第 n n n个球放到了哪里
1. 1. 1.自己占一个盒子,方案为 S ( n − 1 , m − 1 ) S(n−1,m−1) S(n1,m1)
2. 2. 2.和之前的元素共占 m m m个盒子,方案为 S ( n − 1 , m )  ⁣ ⋅  ⁣ m S(n−1,m)\!\cdot\!m S(n1,m)m,最后的系数是考虑放在不同位置。
这里我们认为 { 1 } { 24 } { 3 } \{1\}\{2 4\}\{3\} {1}{24}{3} { 1 } { 2 } { 34 } \{1\}\{2\}\{3 4\} {1}{2}{34}是不同的方案
{ 1 } { 24 } { 3 } \{1\}\{2 4\}\{3\} {1}{24}{3} { 1 } { 3 } { 24 } \{1\}\{3\}\{2 4\} {1}{3}{24}是相同的方案
综上
S ( n , m )  ⁣ =  ⁣ S ( n − 1 , m − 1 )  ⁣ +  ⁣ S ( n − 1 , m )  ⁣ ⋅  ⁣ m S(n,m)\!=\!S(n−1,m−1)\!+\!S(n−1,m)\!\cdot\!m S(n,m)=S(n1,m1)+S(n1,m)m
边 界 条 件 S ( 0 , 0 )  ⁣ =  ⁣ 1 边界条件S(0,0)\!=\!1 S(0,0)=1


容斥
S ( n , m ) = 1 m ! ∑ k = 0 m ( − 1 ) k ⋅ C ( m , k ) ⋅ ( m − k ) n S(n,m)=\frac{1}{m!}\sum^m_{k=0}(−1)^k\cdot C(m,k)\cdot(m−k)^n S(n,m)=m!1k=0m(1)kC(m,k)(mk)n
也比较好理解,我们去枚举一个空盒子的个数
答案 = 无视空盒子放的方案 - 至少有一个盒子为空的方案 + 至少有两个盒子为空的方案 + …
这个式子可以用 F F T FFT FFT优化,因此我们可以在 O ( n l o g n ) O(nlogn) O(nlogn)的复杂度内得到一行的斯特林数

小练习
B e l l N u m b e r s Bell Numbers BellNumbers - C F 568 B CF568B CF568B
n n n个数分成若干个集合的方案数
B ( n ) = ∑ i = 1 n S ( n , i ) B(n)=\sum_{i=1}^{n}S(n,i) B(n)=i=1nS(n,i)


欧拉数

n n n个数的排列字其中有 k k k个数满足 p i < p i + 1 p_i<p_{i+1} pi<pi+1的排列个数
递推求解
E ( n , k ) = ( k + 1 )  ⁣ ⋅  ⁣ E ( n − 1 , k )  ⁣ +  ⁣ ( n − k )  ⁣ ⋅  ⁣ E ( n − 1 , k − 1 ) E(n,k)=(k+1)\!\cdot\!E(n-1,k)\!+\!(n-k)\!\cdot\!E(n-1,k-1) E(n,k)=(k+1)E(n1,k)+(nk)E(n1,k1)

数位dp

数位 d p dp dp是计数类 d p dp dp的一种,其基本问题为求一段区间内满足特定限制的数的个数。
其思路是在数位上进行 d p dp dp,通常在十进制或二进制上进行。
d p dp dp时可能需要记录:当前在第几位,上一个数字是什么,和题目有关的一些信息,当前位是否和限制相等等。
注意:
如果是多个整数,可能需要记录进位,借位等
注意前导零的问题 ( ( (这玩意细节很多 ) ) )
小练习
1. 1. 1.给定一个区间 [ l , r ] [l,r] [l,r],问 l l l r r r的整数中有几个转换成二进制数后 0 0 0 1 1 1 ( ( (不计前导零 ) ) ) ( P O J 3252 ) (POJ3252) (POJ3252)
1  ⁣ ≤  ⁣ l  ⁣ <  ⁣ r  ⁣ ≤  ⁣ 2  ⁣ ⋅  ⁣ 1 0 9 1\!\leq\!l\!<\!r\!\leq\!2\!\cdot\!10^9 1l<r2109


2. 2. 2. l l l r r r之间且能被它的十进制表示的每个数字整除的数的个数。
24 24 24是满足条件的,因为 24 24 24 2 2 2 4 4 4的倍数。 ( C F 55 D ) ( (CF 55D)( (CF55D)(时限: 4 s 4s 4s ) ) )
1  ⁣ ≤  ⁣ l  ⁣ <  ⁣ r  ⁣ ≤  ⁣ 9  ⁣ ⋅  ⁣ 1 0 18 1\!\leq\!l\!<\!r\!\leq\!9\!\cdot\!10^{18} 1l<r91018
提示: 2520  ⁣ =  ⁣ l c m ( 1 , 2 , 3...9 ) 2520\!=\!lcm(1,2,3...9) 2520=lcm(1,2,3...9),所以根据一个数对 2520 2520 2520取模后的值可以判断这个数是否整除 1...9 1...9 1...9中的数


3. 3. 3.有一个物品重量为 w w w,现在你有 1 , 2 , 4 , . . . , 2 n 1,2,4,...,2^n 1,2,4,...,2n重量的砝码各一个,问有多少种方法可以使天平平衡, w w w以二进制给出。 ( P O J 3971 ) (POJ3971) (POJ3971)
n  ⁣ ≤  ⁣ 1000000 , w  ⁣ ≤  ⁣ 2 n n\!\leq\!1000000,w\!\leq\!2^n n1000000,w2n
思考后,题意就是让我们找一个 x x x y y y,使得 w  ⁣ +  ⁣ x  ⁣ =  ⁣ y , x & y  ⁣ =  ⁣ 0 w\!+\!x\!=\!y,x\&y\!=\!0 w+x=y,x&y=0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值