acwing算法基础之数学知识--求组合数基础版

news/2024/11/24 0:39:30/

目录

  • 1 基础知识
  • 2 模板
  • 3 工程化

1 基础知识

(一)
组合数 C n k C_n^k Cnk的计算公式,
C n k = n ! k ! ⋅ ( n − k ) ! C_n^k=\frac{n!}{k!\cdot (n-k)!} Cnk=k!(nk)!n!
故可以这样计算,

int compute_combination_n_k(int n, int k) {if (k > n) {return -1;//输入参数不合法}long long a = 1, b = 1, c = 1;for (int i = 1; i <= n; ++i) {a = a * i; //计算a时,可能会超出long long范围}for (int i = 1; i <= k; ++i) {b = b * i;}for (int i = 1; i <= n - k; ++i) {c = c * i;}long long res = a / b / c;return res;
}

该计算方法的缺点是,在计算 n ! n! n!时,可能会超出long long范围。

(二)
第(一)中的公式进行简化,有,
C n k = n ⋅ ( n − 1 ) ⋯ ( n − k + 1 ) 1 ⋅ 2 ⋯ k C_n^k=\frac{n\cdot(n-1)\cdots(n-k+1)}{1\cdot 2\cdots k} Cnk=12kn(n1)(nk+1)
注意需要满足 k ≤ n k\leq n kn
将上述公式转换为代码,如下所示,

int compute_combination_n_k(int n, int k) {if (k > n) {return -1; //-1表示无效值。}long long a = 1;//表示分子long long b = 1;//表示分母for (int i = 1; i <= k; ++i) {a = a * (n - i + 1); //注意这一步可能会超出long long最大值b = b * i;}long long res = a / b;return res;
}

上述代码在计算分子时比较容易超出long long,一般不采取这种计算方法,除非n比较小。

(三)
组合数的递推公式,
C n k = C n − 1 k − 1 + C n − 1 k C_n^k=C_{n-1}^{k-1}+C_{n-1}^{k} Cnk=Cn1k1+Cn1k
注意需要满足 k ≤ n k\leq n kn

利用该公式可以在 O ( n ) O(n) O(n)时间复杂度下求出N以内的所有组合数,代码如下,

const int N = 2010;
int c[N][N];for (int i = 0; i < N; ++i) {for (int j = 0; j <= i; ++j) {if (!j) {c[i][j] = 1;} else {c[i][j] = c[i-1][j-1] + c[i-1][j];}}
}

使用上述计算方法,一般不会超出long long范围。

2 模板

暂无。。。

3 工程化

暂无。。。


http://www.ppmy.cn/news/1238343.html

相关文章

jQuery_01

什么是jQuery&#xff1f; jQuery < 官网 他是一个跨主流浏览器的JavaScript库。一种高级的JavaScript语法库。里面有大量的js函数&#xff0c;使用这些函数操作dom&#xff0c;做事件、动画、ajax处理。语法更加简单了&#xff01;&#xff01;&#xff01; 下载jQu…

vue3自定义拖拽指令

<template><div v-move class"box"></div> </template><script setup lang"ts"> import { Directive } from vue const vMove:Directive (el:HTMLElement) >{const mousedown (e:MouseEvent) >{// 鼠标按下const s…

jenkins + gitlab 自动部署(webhook)

Jenkins是一个流行的开源CI/CD工具&#xff0c;可以与Git等版本控制系统集成&#xff0c;实现自动构建、测试和部署。Webhook是一种机制&#xff0c;可以在Git仓库中设置&#xff0c;在代码提交或合并请求时触发Jenkins构建任务&#xff0c;以完成自动化部署。 实操 设备信息 …

网工内推 | 美的、得力集团,包吃包住,IE认证优先,14薪

01 美的 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1.负责IT网络设备、IDC机房的日常维护巡检、监控和管理&#xff1b; 2.负责路由、交换、防火墙、无线控制器、AP等网络设备的开通、调整、优化升级&#xff1b; 3.负责公司OT、IT网络规划&#xff0c;项目实施以…

搜索引擎语法

演示自定的Google hacking语法&#xff0c;解释含意以及在渗透过程中的作用 Google hacking site&#xff1a;限制搜索范围为某一网站&#xff0c;例如&#xff1a;site:baidu.com &#xff0c;可以搜索baidu.com 的一些子域名。 inurl&#xff1a;限制关键字出现在网址的某…

修改YOLOv5的模型结构第三弹

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 文章目录 任务任务拆解 开始修改C2模块修改yolo.py修改模型配置文件 模型训练 上次已…

2024-NeuDS-数据库题目集

一.判断题 1.在数据库中产生数据不一致的根本原因是冗余。T 解析&#xff1a;数据冗余是数据库中产生数据不一致的根本原因&#xff0c;因为当同一数据存储在多个位置时&#xff0c;如果其中一个位置的数据被修改&#xff0c;其他位置的数据就不一致了。因此&#xff0c;在数据…

Matlab loglog函数

loglog(X,Y) loglog(X,Y,LineSpec) loglog(X1,Y1,...,Xn,Yn) loglog(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn) loglog(Y) loglog(Y,LineSpec) loglog(tbl,xvar,yvar) loglog(tbl,yvar) loglog(ax,___) loglog(___,Name,Value) p loglog(___)说明 向量和矩阵数据 示例 loglog(X,Y…