排列组合
技巧
具体参考链接
模板
如果对\(\left( \begin{array}{c} n\\ m\\
\end{array}
\right)\)组合数轮询并不多,按照定义求单个组合数即可
1 2 3 4 5 6 7 8
| ll c(int n, int m) { ll ans = 1; for (int i = n; i > n - m; --i) { ans *= i; ans /= (n + 1 - i); } return ans; }
|
如果轮询次数过多,还是用杨辉三角打表吧:
1 2 3 4 5 6
| for (int i = 0; i <= N; ++i) { c[i][0] = c[i][i] = 1; for (int j = 1; j < i; ++j) { c[i][j] = c[i - 1][j] + c[i - 1][j - 1]; } }
|
练习题
卡特兰数