零碎知识点

* 除法向上取整:

1 int a, b;//a 除 b 上取整
2 printf("%d
", (a + b - 1) / b);
View Code

* multiset在删除时,会将迭代器所指向的相同元素全部删除,当只想删除一个时,代码如下:

1 multiset<int> s;
2 multiset<int> :: iterator it;
3 if ((it = s.find(1)) != s.end()) {//x为想要删除的元素
4     s.erase(it);
5 }
View Code

* 设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’ 的个数,可以这样写:

1 int Count(int x) {
2     int re = 0;
3     while (x > 0) {
4         re++;
5         x &= (x - 1); 
6     }
7     return re;
8 }
View Code

* 如果有三个数满足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)。

原文地址:https://www.cnblogs.com/Sundial/p/11830649.html