基本原理
- 列出题目中的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=n−p1n−p2n+p1∗p2n - 对于所有数,令它的因子集合为[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)S⋅n⋅i⊆S∏pi1=ni⊆[p]∏(1−pi1)
经典题目
N个变量xi,每个变量满足0<=xi<=Ci0<=x_{i}<=C_{i}0<=xi<=Ci,求∑x=A\sum x=A∑x=A的解的数量,N<=10,A<=1e9,Ci<=1e9N<=10,A<=1e9,C_{i}<=1e9N<=10,A<=1e9,Ci<=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⋅(n−1A−∑i⊆S(Ci+1)+n−1)
NNN个变量xix_{i}xi,每个变量满足0<=xi<=Ci0<=x_{i}<=C_{i}0<=xi<=Ci,求∑x=A\sum x=A∑x=A的解的数量,N<=200,A<=200,Ci<=200N<=200,A<=200,C_{i}<=200N<=200,A<=200,Ci<=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⋅(n−1A−∑i⊆S(Ci+1)+n−1) - 我们可以把∑i⊆S(Ci+1)\sum_{i\subseteq S}^{ }(C_{i}+1)∑i⊆S(Ci+1)相同的放到一起算
- 可以看成有N个物品,每个体积是(Ci+1)(C_{i}+1)(Ci+1)价值为−1-1−1,背包容量是AAA
- dp[i][j]dp[i][j]dp[i][j]表示现在考虑到第i个数,∑i⊆S(Ci+1)=j\sum_{i\subseteq S}^{ }(C_{i}+1)=j∑i⊆S(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[i−1][j]−dp[i−1][j−Ci−1]
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=0∑Adp[n][i]⋅(n−1A−i+n−1)
NNN个变量xix_{i}xi,每个变量满足0<=xi<=Ci0<=x_{i}<=C_{i}0<=xi<=Ci,求∑x=A\sum x=A∑x=A的解的数量,N<=32,A<=1e9,Ci<=1e9N<=32,A<=1e9,C_{i}<=1e9N<=32,A<=1e9,Ci<=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]∑i⊆S(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]∑i⊆S(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,j∑a[i]+b[j]⩽Av[i]⋅w[j]⋅(n−1A−a[i]−b[j]+n−1)
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,j∑a[i]+b[j]⩽Ak=0∑n−1v[i]⋅(kA−a[i]+n−1)⋅w[j]⋅(n−1−k−b[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=0∑n−1i,j∑a[i]+b[j]⩽Av[i]⋅(kA−a[i]+n−1)⋅w[j]⋅(n−1−k−b[j]) - 枚举aia_{i}ai,此时a[i]+b[j]<=Aa[i]+b[j]<=Aa[i]+b[j]<=A就变成了b[j]<=A−a[i]b[j]<=A-a[i]b[j]<=A−a[i],对b[j]b[j]b[j]进行前缀和计算,就可以在内计算出答案
NNN个变量xix_{i}xi,每个变量满足0<=xi<=Ci0<=x_{i}<=C_{i}0<=xi<=Ci,当A=⌊∑Ci2⌋A=\left \lfloor \frac{\sum Ci}{2} \right \rfloorA=⌊2∑Ci⌋时,∑x=A\sum x=A∑x=A的解的数量最多。