组合数的两种计算方法(递推,对数) | 您所在的位置:网站首页 › 取对数公式 › 组合数的两种计算方法(递推,对数) |
https://blog.csdn.net/sxh759151483/article/details/78161232 组合数 从m个不同元素中,任取n(n≤m)个元素并成一组,叫做从m个不同元素中取出n个元素的一个组合;所有可能的组合种数就是组合数。组合数的计算公式如下图: 式子中出现了阶乘,而20!=2.4329020081766 * 1018 这个数字已经和long long能表示的最大整数一个数量级了,而式子是个除式,所以要想办法在过程中把数降下来。
方法一:想到一个组合数公式: c(m,n)=c(m-1,n-1)+c(m-1,n) 这个式子可以这样记忆:你从m个元素里挑n个元素,针对第一个元素要么是n个里的要么不是,如果是的,那么就从剩下的m-1个里挑n-1个 就是c(m-1,n-1);如果第一个元素不是n里的,就从剩下的m-1个元素里挑n个,就是c(m-1,n)。 利用这个公式,就能用递归的方法解决问题。注意递归的结束条件。 代码示例: #include #include using namespace std; long long comb(int m,int n) { if(n==0) return 1; if(n==1) return m; if(n>m/2) return comb(m,m-n); if(n>1) return (comb(m-1,n-1)+comb(m-1,n)); } int main() { int m,n; while(cin>>m>>n) cout |
CopyRight 2018-2019 实验室设备网 版权所有 |