1、排列數( a(n,m) )
從n個不同元素種取出m(m≤n)個元素的所有不同排列的個數,叫做從n個不同元素種取出m個元素的排列數,用a(n,m)表示。
排列數公式a(n,m) =n (n−1) (n−2) ⋯ (n−m+1) = n! / (n−m)!, n,m∈n+,並且m≤n
(規定0!=1)
推導:把n個不同的元素任選m個排序,按計數原理分步進行
取第乙個:有n種取法;
取第二個:有(n−1)種取法;
取第三個:有(n−2)種取法;
……取第m個:有(n−m+1)種取法;
根據分步乘法原理,得出上述公式。
排列數性質a(n, m) = na(n−1, m−1) : 可理解為「某特定位置」先安排,再安排其餘位置。
a(n, m) = ma(n−1, m−1) + a(n−1, m) 可理解為:含特定元素的排列有ma(n−1, m−1),不含特定元素的排列為a(n−1, m)。
ll inv[maxn * maxn]
,fac[maxn * maxn]
;void
init()
inv[1]
=1;for
(int i=
2;i<=n;i++
) inv[0]
=1;for
(int i=
1;i<=n;i++)}
ll c
(ll n,ll m)
ll a
(ll n,ll m)
如果需要列印或者需要用到產生的排序序列,可以使用dfs的方法進行搜尋,設定乙個變數wei,用來表示已經排好了幾位,wei從0開始,如果wei == m,說明已經排好了m個數,輸出就好了,具體**如下:
計算a(3,2):3 26
1 21 3
2 12 3
3 13 2
int vis[
10001];
//檢視該數字是否被訪問過
int ans[
10001];
//儲存已經排好位序的數
voida(
int n,
int m,
int wei)
cout << endl;
}else}}
}
2、可重排列數從 n 個物品中可重複的取 m 個物品,情況種類是 nm;3、圓排列第一次取可能的選擇有 n 種;
第二次取可能的選擇有 n 種;
……第m次取可能的選擇有 n 種;
所以總共的情況種類有 nm種。
首先從n個物品中選出m個物品,情況可能的種類有c(n,m),然後對這選出來的m個物品進行全排列 a(m,m) = m!,因為要保證連成乙個環之後不能重複,以123為例,123,231,312都是同一組圓排列,所以每三組便能總結成為一組,同理可知m個物品的全排列每m組便只有一組是有效的,其餘的(m-1)組都是重複的,所以有效的種類數有 m! / m = (m-1)!,綜上所述,從n數中選取m個數進行圓排列的情況種類有 c(n,m) * (m-1)! = a(n,m)/m
long
long
circular
(int n,
int m)
return sum/m;
//return a(n,m)/m;
}
4、不盡相異元素全排列如果在 n 個元素中有 n1 個元素相同,又有 n2 個元素相同,……又有 nm 個元素相同(n1 + n2 + …… + nm1、組合數<= n),那麼把這 n 個元素進行排列的種類有:
//原始的**
long
longc(
int a,
int n,
int mod)
return ans;
}
//高階版
ll inv[maxn * maxn]
,fac[maxn * maxn]
;void
init()
inv[1]
=1;for
(int i=
2;i<=n;i++
) inv[0]
=1;for
(int i=
1;i<=n;i++)}
ll c
(ll n,ll m)
ll a
(ll n,ll m)
//預處理好資料直接呼叫
ll inv[maxn * maxn]
,fac[maxn * maxn]
;void
init()
inv[1]
=1;for
(int i=
2;i<=n;i++
) inv[0]
=1;for
(int i=
1;i<=n;i++)}
ll c
(ll n,ll m)
ll a
(ll n,ll m)
組合數相應的一些性質:
2、可重組合數
真的是被這個問題困擾了快一天(瑟瑟發抖),一共有三個問題情境,先說乙個我個人認為比較好入手的點吧:
①從n個數中選擇r個數,每次選擇的數可以重複,一共有多少種可能的情況?
組合數學 求組合數
對於求組合數,要根據所給資料範圍來選擇合適的演算法 這道題中所給的資料範圍適合用打表的方法直接暴力求解 先用4e6的複雜度預處理出所有的情況,再用1e4的複雜度完成詢問即可 include using namespace std const int n 2010 const int mod 1e9 ...
數學 組合數學
mod must be a prime const int mod 1e9 7 namespace combinatory ll inv ll x ll fac maxn invfac maxn void initc int n ll a ll n,ll m ll c ll n,ll m ll d ...
組合數學筆記
從n個數中選m個數,每個數至多選一次,方案數 性質 c n,0 c n,n 1 c n,m c n,n m c n,m c n 1,m 1 c n 1,m 楊輝三角 二項式展開 x y n i 0.n c n,i x iy n i 那這裡先說一下楊輝三角 前提 每行端點與結尾的數為1 每個數等於它上...