组合数
一、知识学习
二、操作实践



int u_cnr(int n, int r)
{
// 特殊情况
if (n < 0 || r < 0 || n < r) return 0;
if (r == 0 || r == n) return 1;
// C(n, r) = C(n, n - r)
if (r > (n >> 1)) r = n - r;
// 初始化为负数
int c[n - r + 1];
memset(c, -1, sizeof(c));
// 滚动数组
for (int i = 1; i <= r; ++i) {
for (int j = 1; j <= n - r; ++j) {
c[j] += c[j - 1];
}
}
// 返回正数
return -c[n - r];
}
参考:用加法求组合数

浙公网安备 33010602011771号