容斥原理

基本原理

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

欧拉函数

  • 求1~n之间与n互质的数的个数
  • 对不合法的数进行容斥
  • 假设有三个质因子p1,p2,p3p1,p2,p3p1,p2,p3
    ans=n−np1−np2+np1∗p2ans=n-\frac{n}{p1}-\frac{n}{p2}+\frac{n}{p1*p2}ans=np1np2n+p1p2n
  • 对于所有数,令它的因子集合为[p]
    ans=∑S⊆[p](−1)S⋅n⋅∏i⊆S1pi=n∏i⊆[p](1−1pi)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;=xi&lt;=Ci0&lt;=x_{i}&lt;=C_{i}0<=xi<=Ci,求∑x=A\sum x=Ax=A的解的数量,N&lt;=10,A&lt;=1e9,Ci&lt;=1e9N&lt;=10,A&lt;=1e9,C_{i}&lt;=1e9N<=10A<=1e9Ci<=1e9

  • 对不合法的xi进行容斥
  • 枚举限制爆了的集合
    ans=∑S(−1)S⋅(A−∑i⊆S(Ci+1)+n−1n−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)

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

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

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

  • meetmeetmeet ininin middlemiddlemiddle
  • 可以分成两组,每组大小为 N/2N/2N/2
  • a[j],v[j]a[j],v[j]a[j],v[j]表示第一组∑i⊆S(Ci+1)=a[j]\sum_{i\subseteq S}^{ }(C_{i}+1)=a[j]iS(Ci+1)=a[j]时,v[j]=∑(−1)Sv[j]=\sum (-1)^{S}v[j]=(1)S
  • b[j],w[j]b[j],w[j]b[j],w[j]表示第二组∑i⊆S(Ci+1)=b[j]\sum_{i\subseteq S}^{ }(C_{i}+1)=b[j]iS(Ci+1)=b[j]时,w[j]=∑(−1)Sw[j]=\sum(-1)^{S}w[j]=(1)S
    ans=∑i,ja[i]+b[j]⩽Av[i]⋅w[j]⋅(A−a[i]−b[j]+n−1n−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)
    ans=∑i,ja[i]+b[j]⩽A∑k=0n−1v[i]⋅(A−a[i]+n−1k)⋅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])
    ans=∑k=0n−1∑i,ja[i]+b[j]⩽Av[i]⋅(A−a[i]+n−1k)⋅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])
  • 枚举aia_{i}ai,此时a[i]+b[j]&lt;=Aa[i]+b[j]&lt;=Aa[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]进行前缀和计算,就可以在内计算出答案

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值