1. 程式人生 > >多重集下的組合數

多重集下的組合數

多重集定義

多重集是指包含重複元素的廣義集合
例如S={n1a1,n2a2,...,nkak}就是由n1a1n2a2,…,nkak組成的多重集

多重集的排列數

給定一個多重集S={n1a1,n2a2,...,nkak}
其排列數為

A=N!n1!n2!...nk!(N=i=1kni)

多重集的組合數

(Q1)
給定一個多重集

S={n1a1,n2a2,...,nkak}
以及一個整數m,且有m<=ni(i[1,k])
求從S中取出任意m個元素可以產生的不同多重集數量
(A1)
ans=Ck+m1k1

證明

題目所求就是滿足i=1kxi=m的多重集{x1a1,x2a2,...,xkak}的數量
換句話說
就是就是要給每個xi賦值[0,m]中的任意整數,且所有xi的和為m
(這裡因為有

m<=ni(i[1,k]),所以不用考慮xi>ni的情況)

若我們用0的個數表示每個xi的值
那麼我們可以轉化原問題為
k1