在數學中,某個序列的母函式(generating function,又稱生成函式)是一種形式冪級數,其每一項的係數可以提供關於這個序列的資訊。使用母函式解決問題的方法稱為母函式方法。
母函式可分為很多種,包括普通母函式、指數母函式、l級數、貝爾級數和狄利克雷級數。對每個序列都可以寫出以上每個型別的乙個母函式。構造母函式的目的一般是為了解決某個特定的問題,因此選用何種母函式視乎序列本身的特性和問題的型別。
1.「把組合問題的加法法則和冪級數的乘冪對應起來」2.「母函式的思想很簡單 — 就是把離散數列和冪級數一 一對應起來,把離散數列間的相互結合關係對應成為冪級數間的運算關係,最後由冪級數形式來確定離散數列的構造. 「
解題時,首先要寫出表示式,通常是多項的乘積,每項由多個x^y組成。如(1+x+x^2)(1+x^4+x^8)(x^5+x^10+x^15)。
通用表示式為
(x^(v[0]*n1[0])+x^(v[0]*(n1[0]+1))+x^(v[0]*(n1[0]+2))+...+x^(v[0]*n2[0]))
(x^(v[1]*n1[1])+x^(v[1]*(n1[1]+1))+x^(v[1]*(n1[1]+2))+...+x^(v[1]*n2[1]))
...(x^(v[k]*n1[k])+x^(v[k]*(n1[k]+1))+x^(v[k]*(n1[k]+2))+...+x^(v[k]*n2[k]))
k對應具體問題中物品的種類數。
v[i]表示該乘積表示式第i個因子的權重,對應於具體問題的每個物品的價值或者權重。
n1[i]表示該乘積表示式第i個因子的起始係數,對應於具體問題中的每個物品的最少個數,即最少要取多少個。
n2[i]表示該乘積表示式第i個因子的終止係數,對應於具體問題中的每個物品的最多個數,即最多要取多少個。
對於表示式(1+x+x^2)(x^8+x^10)(x^5+x^10+x^15+x^20),v[3]=,n1[3]=,n2[3]=。
解題的關鍵是要確定v、n1、n2陣列的值。
通常n1都為0,但有時候不是這樣。
n2有時候是無限大。
之後就實現表示式相乘,從第乙個因子開始乘,直到最後乙個為止。此處通常使用乙個迴圈,迴圈變數為i。每次迭代的計算結果放在陣列a中。計算結束後,a[i]表示權重i的組合數,對應具體問題的組合數。
迴圈內部是把每個因子的每個項和a中的每個項相乘,加到乙個臨時的陣列b的對應位(這裡有兩層迴圈,加上最外層迴圈,總共有三層迴圈),之後就把b賦給a。
這些過程通常直接套用模板即可。
//為計算結果,b為中間結果。
int a[max],b[max];
//初始化a
memset(a,0,sizeof(a));
a[0]=1;
for (int i=1;i<=17;i++)//迴圈每個因子
p是可能的最大指數。拿鈔票組合這題來說,如果要求15元有多少組合,那麼p就是15;如果問最小的不能拼出的數值,那麼p就是所有錢加起來的和。p有時可以直接省略。具體請看本文後面給出的例題。
如果n2是無窮,那麼第二層迴圈條件j<=n2[i]可以去掉。
用乙個last變數記錄目前最大的指數,這樣只需要在0..last上進行計算。
這裡給出第二個模板:
//初始化a,因為有last,所以這裡無需初始化其他位
a[0]=1;
int last=0;
for (int i=0;i可以看一下有關裸題:hdu1521
一、hdu 1085和hdu 1171兩題套用了第二個模板,省略了**中二三層迴圈裡關於last2的條件(其實也可以加上)。
二、hdu 1398套用了第乙個模板,因為n2中每一項為無窮大,所以n2陣列就省略了。
詳見:hdu 1398:
三、hdu 2079、hdu 2082和hdu 2110三題直接套用了第二個模板。
詳見:hdu 2079:
hdu 2082:
hdu 2110:
另外,至於什麼時候用第乙個模板,什麼時候用第二個模板,就看題目規模。
通常情況下,第乙個模板就夠用了,上面的那些用第二個模板的題目用第乙個模板同樣能ac。
但如果資料規模比較大(通常不會有這種情況),就要使用第二個模板了。
以上題目n1均為0。
四、hdu 2152是一道n1不為0的題目,我在這裡分別套用第乙個和第二個模板解題。
詳見:hdu 2152:
母函式模板
母函式,又稱生成函式,是acm競賽中經常使用的一種解題演算法,常用來解決組合方面的題目。本文講解母函式,但不講解該演算法的基礎理論。讀者隨便找一本組合數學教材便可找到相應的內容,或者直接在網上搜尋一下。母函式通常解決類似如下的問題 給5張1元,4張2元,3張5元,要得到15元,有多少種組合?某些時候...
母函式模板
研究以下多項式乘法 可以看出 x2項的係數a1a2 a1a3 an 1an中所有的項包括n個元素a1,a2,an中取兩個組合的全體 同理 x3項係數包含了從n個元素a1,a2,an中取3個元素組合的全體 以此類推。特例 若令a1 a2 an 1,在 8 1 式中a1a2 a1a3 an 1an項係數...
母函式入門 模板
在數學中,某個序列的母函式 generating function,又稱生成函式 是一種形式冪級數,其每一項的係數可以提供關於這個序列的資訊。使用母函式解決問題的方法稱為母函式方法。母函式可分為很多種,包括普通母函式 指數母函式 l級數 貝爾級數和狄利克雷級數。對每個序列都可以寫出以上每個型別的乙個...