基本原理
- 列出题目中的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=n−p1n−p2n+p1∗p2n - 对于所有数,令它的因子集合为[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)S⋅n⋅i⊆S∏pi1=ni⊆[p]∏(1−pi1)
经典题目
N个变量xi,每个变量满足 0 < = x i < = C i 0<=x_{i}<=C_{i} 0<=xi<=Ci,求 ∑ x = A \sum x=A ∑x=A的解的数量, N < = 10 , A < = 1 e 9 , C i < = 1 e 9 N<=10,A<=1e9,C_{i}<=1e9 N<=10,A<=1e9,Ci<=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⋅(n−1A−∑i⊆S(Ci+1)+n−1)
N N N个变量 x i x_{i} xi,每个变量满足 0 < = x i < = C i 0<=x_{i}<=C_{i} 0<=xi<=Ci,求 ∑ x = A \sum x=A ∑x=A的解的数量, N < = 200 , A < = 200 , C i < = 200 N<=200,A<=200,C_{i}<=200 N<=200,A<=200,Ci<=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⋅(n−1A−∑i⊆S(Ci+1)+n−1) - 我们可以把 ∑ i ⊆ S ( C i + 1 ) \sum_{i\subseteq S}^{ }(C_{i}+1) ∑i⊆S(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
∑i⊆S(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[i−1][j]−dp[i−1][j−Ci−1]
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=0∑Adp[n][i]⋅(n−1A−i+n−1)
N N N个变量 x i x_{i} xi,每个变量满足 0 < = x i < = C i 0<=x_{i}<=C_{i} 0<=xi<=Ci,求 ∑ x = A \sum x=A ∑x=A的解的数量, N < = 32 , A < = 1 e 9 , C i < = 1 e 9 N<=32,A<=1e9,C_{i}<=1e9 N<=32,A<=1e9,Ci<=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] ∑i⊆S(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]
∑i⊆S(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,j∑a[i]+b[j]⩽Av[i]⋅w[j]⋅(n−1A−a[i]−b[j]+n−1)
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,j∑a[i]+b[j]⩽Ak=0∑n−1v[i]⋅(kA−a[i]+n−1)⋅w[j]⋅(n−1−k−b[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=0∑n−1i,j∑a[i]+b[j]⩽Av[i]⋅(kA−a[i]+n−1)⋅w[j]⋅(n−1−k−b[j]) - 枚举 a i a_{i} ai,此时 a [ i ] + b [ j ] < = A a[i]+b[j]<=A a[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]进行前缀和计算,就可以在内计算出答案
N N N个变量 x i x_{i} xi,每个变量满足 0 < = x i < = C i 0<=x_{i}<=C_{i} 0<=xi<=Ci,当 A = ⌊ ∑ C i 2 ⌋ A=\left \lfloor \frac{\sum Ci}{2} \right \rfloor A=⌊2∑Ci⌋时, ∑ x = A \sum x=A ∑x=A的解的数量最多。