组合数

一、知识学习

1、组合数百科
2、求组合数

二、操作实践

1
3
4

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];
}

参考:用加法求组合数

posted @ 2025-10-09 16:52  gdyyx  阅读(12)  评论(0)    收藏  举报