組合計數(初步)
阿新 • • 發佈:2022-03-13
定義
組合數學主要是研究某組離散物件滿足一定條件的安排的存在性、構造及計數等問題。組合計數理論是組合數學中一個最基本的研究方向,主要研究滿足一定條件的安排方式的數目及其計數問題。本課程主要介紹組合數學中常見的和重要的一些計數原理、計數方法和計數公式,包括一般的排列、組合的計算以及生成函式、容斥原理、反演原理、Polya 計數定理等等,是研究組合數學的初步。
模板
//組合數學計算c(n,m) 1、c(n,m)=n!/(m!*(n-m)!) long long cal_c(int n, int m) { long long c; if(n < m) c=0; else if (n == m || m == 0) c=1; else { c = 1; n = n - m + 1; for (int i=1; i<=m; i++) { c *= n++; c /= i; } } return c; } long long cal_c(int n,int k) { if(k>n/2) k=n-k; //減少列舉量 long long a=1,b=1; for(int i=1;i<=m;i++) { a*=n+1-i; b*=i; if(a%b==0) a/=b,b=1; } return a/b; } 2、數學知識 c(n,m)=c(n-1,m)+c(n-1,m-1) void db() { for(int i=0;i<maxn;i++) c[i][0]=1; for(int i=1;i<maxn;i++) for(int j=1;j<maxn;j++) c[i][j]=c[i-1][j]+c[i-1][j-1]; }