• 算法竞赛模板 计算组合数


    先贴上一张组合数的基本公式吧,在这里我们暂且规定n为下标,m为上标(n≥m)

    ①普通方法计算组合数

    int com(int n,int m)
    {
        int s=1;
        for(int i=1;i<=m;i++)
            s=s*(n+1-i)/i;
        return s;
    }

    ②运用对数函数计算组合数(可以用于处理较大的数值)

    (1) 在c语言中,log函数也就是我们通常所说的ln函数,即以e为底的对数函数

    (2) s1作为分子,从m+1累乘至n;s2作为分母,从1累乘至n-m;

    (3) 最后再用exp函数把经过处理的组合数还原出来

    double lncom(int n,int m)
    {
        double s1=0,s2=0,i;
        if(m<n/2.0)
            m=n-m;
        for(i=m+1;i<=n;i++)
            s1=s1+log(i);
        for(i=2;i<=n-m;i++)
            s2=s2+log(i);
        return s1-s2;             
    }
    double com(int n,int m)
    {
        if(n<m)
            return 0;
        return exp(lncom(n,m));
    }
  • 相关阅读:
    CentOS 7 安装java 环境
    CentOS 7 替换网易yum 源
    九度:题目1553:时钟
    Maximum Subarray
    职场细节
    poj2524 Ubiquitous Religions
    九度 1526:朋友圈
    程序载入
    设备管理
    操作系统系列
  • 原文地址:https://www.cnblogs.com/kannyi/p/8406088.html
Copyright © 2020-2023  润新知