求大组合数模板

来源:互联网 发布:隔壁老王 知乎 编辑:程序博客网 时间:2024/06/05 00:20

从n个数中选出m个的方案数称为n的m的组合数,下面是可以求出long long 范围内的组合数模板。

主要思想就是利用double 求出近似的数值,最后约分。

long long fun(double n,double m){double s=1.0;while(m>0){s*=(n--)/(m--);}s+=0.5;                 //防止有精度损失而造成的误差.return (long long)s;}
例题:

Selection of Personnel
Time Limit:500MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u
Submit Status Practice CodeForces 630F

Description

One company of IT City decided to create a group of innovative developments consisting from 5 to 7 people and hire new employees for it. After placing an advertisment the company received n resumes. Now the HR department has to evaluate each possible group composition and select one of them. Your task is to count the number of variants of group composition to evaluate.

Input

The only line of the input contains one integer n (7 ≤ n ≤ 777) — the number of potential employees that sent resumes.

Output

Output one integer — the number of different variants of group composition.

Sample Input

Input
7
Output
29
题目大意:给你一个数n(n>7),求C(n,7)+(n,6)+C(n,5)的值。

利用上述模板直接求:

#include<stdio.h>#include<string.h>int vis2[800];long long fun(double n,double m){double s=1.0;while(m>0){s*=(n--)/(m--);}s+=0.5;return (long long)s;}int main(){   double n,k=5,s;   long long sum=0;   scanf("%lf",&n);   sum+=(fun(n,5)+fun(n,6)+fun(n,7));   printf("%lld\n",sum);   return 0;} 



0 0