今天學習了一下母函式的知識,感覺它像是專門做一類題用的。
推薦乙個比較好的入門的母函式部落格:
我寫這篇文章的目的,就是為了再次總結一下他寫的那個模板,畢竟看了很久才懂的。
這裡我以 hdu 1028 這道題為例
這道題目的大致意思是:給你乙個正整數n,然後要你求有多少種可以加到n的方式。
#include#include#include#include#include#include#include#includeusing namespace std;
#define maxn 125
int c1[maxn],c2[maxn];
int main()
for(int i=2;i<=n;i++)
}for(int j=0;j<=n;j++)
}//for(int i=0;i<=2*n;i++) printf("%d ",c1[i]); puts("");
printf("%d\n",c1[n]);
}}
這是一道母函式的模板題。
c1陣列是用來儲存各質量砝碼可以組合的數目,c2陣列則是為了儲存中間的結果。
首先在第乙個for中我們對c1陣列全部初始化為1,因為第乙個括號裡面的各項一開始係數均為1。
在我打嘆號的地方,我覺得這裡的意思是:對於指數為(k+j)的項,它的係數就直接加上c1[j]就好了,因為一開始它的係數為1,然後相乘後係數為c1[j]了,所以直接加上就好。
*我覺得這裡也用到了乙個貪心的思想,就是因為我們要得到的是n這個數有幾種組成方式,所以我們只需要求出n這個指數的係數就好了,對於大於它的可以不用求。
也許理解的並不是很好,希望指教!
數學 普通型生成函式
序列 a a 0,a 1,a 2,a 3,a 4,的普通型生成函式,定義為形式冪級數 f x sum limits a ix i 若序列 a 擁有通項公式,那麼 a i 就等於通項公式。再設 g x sum limits b ix i 有 f x pm g x sum limits a i pm b...
母函式模板
母函式,又稱生成函式,是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項係數...