從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】
每個數等於它上方兩數之和。
每行數字左右對稱,由1開始逐漸變大。
第n行的數字有n項。第n行數字和為2n-1。
第n行的m個數可表示為 c(n-1,m-1),即為從n-1個不同元素中取m-1個元素的組合數。
第n行的第m個數和第n-m+1個數相等 ,為組合數性質之一。
每個數字等於上一行的左右兩個數字之和。可用此性質寫出整個楊輝三角。即第n+1行的第i個數等於第n行的第i-1個數和第i個數之和,這也是組合數的性質之一。即 c(n+1,i)=c(n,i)+c(n,i-1)。
(a+b)^n的展開式中的各項係數依次對應楊輝三角的第(n+1)行中的每一項。
將第2n+1行第1個數,跟第2n+2行第3個數、第2n+3行第5個數……連成一線,這些數的和是第4n+1個斐波那契數;將第2n行第2個數(n>1),跟第2n-1行第4個數、第2n-2行第6個數……這些數之和是第4n-2個斐波那契數。
將各行數字相排列,可得11的n-1(n為行數)次方:1=11^0; 11=11^1; 121=11^2……當n>5時會不符合這一條性質,此時應把第n行的最右面的數字」1」放在個位,然後把左面的乙個數字的個位對齊到十位… …,以此類推,把空位用「0」補齊,然後把所有的數加起來,得到的數正好是11的n-1次方。以n=11為例,第十一行的數為:1,10,45,120,210,252,210,120,45,10,1,結果為 25937424601=11^10。
求組合數除了楊輝三角還有lucas
這裡說一下lucas?
對於c(n, m) mod p。這裡的n,m,p(p為素數)都很大的情況。就不能再用c(n, m) = c(n - 1,m) + c(n - 1, m - 1)的公式遞推了。
對於單獨的c(ni, mi) mod p,已知c(n, m) mod p = n!/(m!(n - m)!) mod p。顯然除法取模,這裡要用到m!(n-m)!的逆元
逆元是什麼呢?
根據費馬小定理: (m!(n-m)!)的逆元為 (m!(n-m)!)^(p-2)
證明嘛…….去問盧卡斯
可以預處理的情況是min(n,mod)可以當做陣列下標,此時預處理什麼階乘啊,線性求逆元啊都是很好的
但是當這兩個數都是1e9++的時候,你只能手動階乘啦
組合數學 求組合數
對於求組合數,要根據所給資料範圍來選擇合適的演算法 這道題中所給的資料範圍適合用打表的方法直接暴力求解 先用4e6的複雜度預處理出所有的情況,再用1e4的複雜度完成詢問即可 include using namespace std const int n 2010 const int mod 1e9 ...
《組合數學》學習筆記
p28 定理2.4.2 設s是多重集合,它有k種不同型別的物件,且每一種型別的有限重複數分別是n1 n2,n k n1,n2,nk 設s的大小為n n1 n 2 nk n n 1 n2 n k。則s的排列數目等於 x n n1 n2 n k x n n1 n2 nk p32 定理2.51 設s是有k...
組合數學學習筆記
常見組合計數 n球m盒分配問題 球有別,盒子有別,盒子可空 m n 每個同學都有m種選擇 球無別,盒子有別,盒子不可空 c n 1,m 1 隔板法 球無別,盒子有別,盒子可空 c n m 1,m 1 先給每個盒子放乙個,再用隔板法 環排列 n 1 線性排列有n 種,每種環排列都包含n種線性排列,所以...