当前位置: 首页 > news >正文

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

目录

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

1 基础知识

(一)
组合数 C n k C_n^k Cnk的计算公式,
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.lryc.cn/news/240960.html

相关文章:

  • SpringBoot中的classpath都包含啥
  • 新王加冕,GPT-4V 屠榜视觉问答
  • python之TCP的网络应用程序开发
  • Axios 拦截器 请求拦截器 响应拦截器
  • Mysql Shell笔记
  • Hive日志默认存储在什么位置?
  • Kafka 常用功能总结(不断更新中....)
  • 单链表相关面试题--5.合并有序链表
  • SV-7042VP sip广播4G无线网络号角
  • 基于OpenCV+MediaPipe的手势识别
  • YOLO目标检测——无人机航拍行人检测数据集下载分享【含对应voc、coc和yolo三种格式标签】
  • 数据提取PDF SDK的对比推荐
  • 【数据结构(C语言)】浅谈栈和队列
  • 【NGINX--5】身份验证
  • 【网络奇缘】- 计算机网络|分层结构|ISO模型
  • 使用whisper实现语音转文本
  • Django中间件与csrf
  • 【搜维尔科技】产品推荐:Virtuose 6D RV,大型工作空间触觉设备
  • <JavaEE> 什么是线程(Thread)?进程和线程有什么区别?
  • 【赠书第7期】从零基础到精通Flutter开发
  • 《golang设计模式》第三部分·行为型模式-07-观察者模式(Observer)/发布者—订阅者模式
  • Maven中常用命令以及idea中使用maven指南
  • 深度学习之八(生成对抗网络--Generative Adversarial Networks,GANs)
  • 内部网关协议_路由信息协议RIP_开放路径优先OSPF协议_基本知识
  • Linux python安装 虚拟环境 virtualenv
  • 洛谷 P1883 函数
  • 【C++心愿便利店】No.14---C++之探索list底层原理
  • 【广州华锐互动】VR防溺水安全内容体验提高群众防溺水意识
  • 【Skynet 入门实战练习】游戏模块划分 | 基础功能模块 | timer 定时器模块 | logger 日志服务模块
  • python内置模块binascii,二进制数据和ASCII字符串之间进行转换