容斥原理

基本原理

  • 列出题目中的n个条件。
  • 求满足这n个条件中每一个的方案的个数。
  • 枚举这些条件的所有2^n个集合。
  • 考虑一个集合x,令不满足x中所有条件的方案有A个。
  • 如果x的大小是奇数,给答案减去A,不然给答案加上A。

欧拉函数

  • 求1~n之间与n互质的数的个数
  • 对不合法的数进行容斥
  • 假设有三个质因子 p 1 , p 2 , p 3 p1,p2,p3 p1,p2,p3
    a n s = n − n p 1 − n p 2 + n p 1 ∗ p 2 ans=n-\frac{n}{p1}-\frac{n}{p2}+\frac{n}{p1*p2} ans=np1np2n+p1p2n
  • 对于所有数,令它的因子集合为[p]
    a n s = ∑ S ⊆ [ p ] ( − 1 ) S ⋅ n ⋅ ∏ i ⊆ S 1 p i = n ∏ i ⊆ [ p ] ( 1 − 1 p i ) ans=\sum_{S\subseteq [p]}^{ } (-1)^{S}\cdot n\cdot \prod_{i\subseteq S}^{ }\frac{1}{pi} = n\prod_{i\subseteq [p]}^{ }(1-\frac{1}{pi}) ans=S[p](1)SniSpi1=ni[p](1pi1)

经典题目

N个变量xi,每个变量满足 0 &lt; = x i &lt; = C i 0&lt;=x_{i}&lt;=C_{i} 0<=xi<=Ci,求 ∑ x = A \sum x=A x=A的解的数量, N &lt; = 10 , A &lt; = 1 e 9 , C i &lt; = 1 e 9 N&lt;=10,A&lt;=1e9,C_{i}&lt;=1e9 N<=10A<=1e9Ci<=1e9

  • 对不合法的xi进行容斥
  • 枚举限制爆了的集合
    a n s = ∑ S ( − 1 ) S ⋅ ( A − ∑ i ⊆ S ( C i + 1 ) + n − 1 n − 1 ) ans= \sum_{S}^{ }(-1)^{S}\cdot\binom{A-\sum_{i\subseteq S}^{ }(C_{i}+1)+n-1}{n-1} ans=S(1)S(n1AiS(Ci+1)+n1)

N N N个变量 x i x_{i} xi,每个变量满足 0 &lt; = x i &lt; = C i 0&lt;=x_{i}&lt;=C_{i} 0<=xi<=Ci,求 ∑ x = A \sum x=A x=A的解的数量, N &lt; = 200 , A &lt; = 200 , C i &lt; = 200 N&lt;=200,A&lt;=200,C_{i}&lt;=200 N<=200A<=200Ci<=200

  • 通过上面的公式
    a n s = ∑ S ( − 1 ) S ⋅ ( A − ∑ i ⊆ S ( C i + 1 ) + n − 1 n − 1 ) ans= \sum_{S}^{ }(-1)^{S}\cdot\binom{A-\sum_{i\subseteq S}^{ }(C_{i}+1)+n-1}{n-1} ans=S(1)S(n1AiS(Ci+1)+n1)
  • 我们可以把 ∑ i ⊆ S ( C i + 1 ) \sum_{i\subseteq S}^{ }(C_{i}+1) iS(Ci+1)相同的放到一起算
  • 可以看成有N个物品,每个体积是 ( C i + 1 ) (C_{i}+1) (Ci+1)价值为 − 1 -1 1,背包容量是 A A A
  • d p [ i ] [ j ] dp[i][j] dp[i][j]表示现在考虑到第i个数, ∑ i ⊆ S ( C i + 1 ) = j \sum_{i\subseteq S}^{ }(C_{i}+1)=j iS(Ci+1)=j时, d p [ i ] [ j ] = ∑ ( − 1 ) S dp[i][j]=\sum (-1)^{S} dp[i][j]=(1)S
    d p [ i ] [ j ] = d p [ i − 1 ] [ j ] − d p [ i − 1 ] [ j − C i − 1 ] dp[i][j]=dp[i-1][j]-dp[i-1][j-C_{i}-1] dp[i][j]=dp[i1][j]dp[i1][jCi1]
    a n s = ∑ i = 0 A d p [ n ] [ i ] ⋅ ( A − i + n − 1 n − 1 ) ans=\sum_{i=0}^{A} dp[n][i]\cdot \binom{A-i+n-1}{n-1} ans=i=0Adp[n][i](n1Ai+n1)

N N N个变量 x i x_{i} xi,每个变量满足 0 &lt; = x i &lt; = C i 0&lt;=x_{i}&lt;=C_{i} 0<=xi<=Ci,求 ∑ x = A \sum x=A x=A的解的数量, N &lt; = 32 , A &lt; = 1 e 9 , C i &lt; = 1 e 9 N&lt;=32,A&lt;=1e9,C_{i}&lt;=1e9 N<=32A<=1e9Ci<=1e9

  • m e e t meet meet i n in in m i d d l e middle middle
  • 可以分成两组,每组大小为 N / 2 N/2 N/2
  • a [ j ] , v [ j ] a[j],v[j] a[j],v[j]表示第一组 ∑ i ⊆ S ( C i + 1 ) = a [ j ] \sum_{i\subseteq S}^{ }(C_{i}+1)=a[j] iS(Ci+1)=a[j]时, v [ j ] = ∑ ( − 1 ) S v[j]=\sum (-1)^{S} v[j]=(1)S
  • b [ j ] , w [ j ] b[j],w[j] b[j],w[j]表示第二组 ∑ i ⊆ S ( C i + 1 ) = b [ j ] \sum_{i\subseteq S}^{ }(C_{i}+1)=b[j] iS(Ci+1)=b[j]时, w [ j ] = ∑ ( − 1 ) S w[j]=\sum(-1)^{S} w[j]=(1)S
    a n s = ∑ i , j a [ i ] + b [ j ] ⩽ A v [ i ] ⋅ w [ j ] ⋅ ( A − a [ i ] − b [ j ] + n − 1 n − 1 ) ans=\sum_{i,j}^{a[i]+b[j]\leqslant A}v[i]\cdot w[j]\cdot \binom{A-a[i]-b[j]+n-1}{n-1} ans=i,ja[i]+b[j]Av[i]w[j](n1Aa[i]b[j]+n1)
    a n s = ∑ i , j a [ i ] + b [ j ] ⩽ A ∑ k = 0 n − 1 v [ i ] ⋅ ( A − a [ i ] + n − 1 k ) ⋅ w [ j ] ⋅ ( − b [ j ] n − 1 − k ) ans=\sum_{i,j}^{a[i]+b[j]\leqslant A} \sum_{k=0}^{n-1}v[i]\cdot \binom{A-a[i]+n-1}{k}\cdot w[j] \cdot\binom{-b[j]}{n-1-k} ans=i,ja[i]+b[j]Ak=0n1v[i](kAa[i]+n1)w[j](n1kb[j])
    a n s = ∑ k = 0 n − 1 ∑ i , j a [ i ] + b [ j ] ⩽ A v [ i ] ⋅ ( A − a [ i ] + n − 1 k ) ⋅ w [ j ] ⋅ ( − b [ j ] n − 1 − k ) ans=\sum_{k=0}^{n-1}\sum_{i,j}^{a[i]+b[j]\leqslant A}v[i]\cdot \binom{A-a[i]+n-1}{k}\cdot w[j] \cdot\binom{-b[j]}{n-1-k} ans=k=0n1i,ja[i]+b[j]Av[i](kAa[i]+n1)w[j](n1kb[j])
  • 枚举 a i a_{i} ai,此时 a [ i ] + b [ j ] &lt; = A a[i]+b[j]&lt;=A a[i]+b[j]<=A就变成了 b [ j ] &lt; = A − a [ i ] b[j]&lt;=A-a[i] b[j]<=Aa[i],对 b [ j ] b[j] b[j]进行前缀和计算,就可以在内计算出答案

N N N个变量 x i x_{i} xi,每个变量满足 0 &lt; = x i &lt; = C i 0&lt;=x_{i}&lt;=C_{i} 0<=xi<=Ci,当 A = ⌊ ∑ C i 2 ⌋ A=\left \lfloor \frac{\sum Ci}{2} \right \rfloor A=2Ci时, ∑ x = A \sum x=A x=A的解的数量最多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值