零碎知识点
* 除法向上取整:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 int a, b;//a 除 b 上取整 2 printf("%d\n", (a + b - 1) / b);
* multiset在删除时,会将迭代器所指向的相同元素全部删除,当只想删除一个时,代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 multiset<int> s; 2 multiset<int> :: iterator it; 3 if ((it = s.find(1)) != s.end()) {//x为想要删除的元素 4 s.erase(it); 5 }
* 设F(n)为斐波那契数列第N项,那么gcd(F(n),F(m))==F(gcd(n,m));
* 曼哈顿距离可以与切比雪夫距离进行相互转化具体见:SGCollin 的博客
* 组合数中,n个数中选取 奇数个数 的方案数与选取 偶数个数 的方案数相同,均为 2n-1。
证明:由二项式定理 (1 - 1)n = ∑xi = 0 (-1)i Cni = 0 可知
该结论正确,该结论还有一种表述方法,即 组合数奇数项加偶数项和为0
用到此结论的一道不错的位运算题目:[LuoguP5390]
* 如果要统计一个数在二进制下 ‘1’ 的个数,可以这样写:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 int Count(int x) { 2 int re = 0; 3 while (x > 0) { 4 re++; 5 x &= (x - 1); 6 } 7 return re; 8 }
* 如果有三个数满足a ^ b = c,那么有b ^ c = a,a ^ c = b (此处为按位异或运算)。
* 在二分图中,最大独立集 = 所有顶点数 - 最小顶点覆盖 = 所有顶点数 - 最大匹配
* M维空间被 N 个 M-1 维物体能切出多少块?
设f[m][n]表示 m 维空间被 n 个 m-1 维物体切出的块数。
一:
初始化 f[i][1] = 2,f[1][j] = j + 1。递推式为 f[m][n] = f[m][n - 1] + f[m - 1][n - 1]。
二:
f[m][n] = C(n, 0) + C(n, 1) + C(n, 2) + ... + C(n, m)。