對於母函式來說,他的本質解決問題的地方在於「:
1.「把組合問題的加法法則和冪級數的乘冪對應起來。」
2.「把離散數列和冪級數一 一對應起來,把離散數列間的相互結合關係對應成為冪級數間的運算關係,最後由冪級數形式來確定離散數列的構造。 「
例如:分別有乙個1克,2克,3克,4克的砝碼,問他們能組成幾種重量?每種重量能有幾種組合方法?
解:用母函式來解決問題,用x來表示砝碼,x的指數來表示砝碼的重量,現在用函式來表示每個砝碼能稱的重量:
1個1克的砝碼:x^0+x^1
1個2克的砝碼:x^0+x^2
依次可以類推:1個3克的砝碼:x^0+x^3
1個4克的砝碼:x^0+x^4
這幾個多項式相乘得到的就是所需要的母函式,每個函式裡面的指數表示重量,前面的係數表示的方法數:計算結果為x^0 + x^1 + x^2 + 2*x^3 + 2*x^4 + 2*x^5 + 2*x^6 + 2*x^7 + x^8 + x^9 + x^10。組成10克重量的只有乙個方法,4克的有2種方法。
注意:2個2克砝碼用的不是x^0+2*x^2,用的是x^0+x^2+x^4.
現有乙個問題就是有若干個1克,2克,4克硬幣,問能組成的個數:
n個1克硬幣:x^0+x^1+x^2+x^3+……
n個2克硬幣:x^0+x^2+x^4+x^6+……x^n*2
n個4克硬幣:x^0+x^4+x^8+x^12+……+x^n*4
想知道n克硬幣的組成重量,就需要計算出x^n前的係數。
就是多項式相乘的原理。
仿照這個**進行模板。
#include
using namespace std;
int main()
; int n;
while(~scanf("%d",&n))
for(int i=1;i<=16;i++) // 每次的增量 (a陣列)
for(int j=0;j<=n;j++)
} printf("%lld\n",c1[n]);
}
}
生成函式 母函式
根據定義,這個序列作為函式的係數,稱g x 就是序列的母函式。和一般意義上的函式相比,母函式的功能是計數。有這樣一道例題 到這一章為止,已知的計數法則就兩種,加法法則 或 和乘法法則 且 前者是分類思想,後者是分步。法1 分步來看,第乙個骰子有1 5種可能,因為兩個骰子之和是6,所以一旦第乙個骰子確...
生成函式(母函式)
參考部落格 在數學中,某個序列 a n 的母函式 又稱生成函式,英語 generating function 是一種形式冪級數,其每一項的係數可以提供關於這個序列的資訊。有三種物品,分別有 3 2,3個,問拿四個的方案數 f i j 表示當前第i個位置,已經選了j個物品的方案數 f 0 0 1 fo...
母函式 合集
hdu 1521 指數型母函式 hdu 2065 指數型母函式 hdu 2152 母函式 hdu 1709 母函式 hdu 1028 母函式 hdu 1171 母函式 hdu 1085 母函式 hdu 1398 母函式 hdu 1521 指數型母函式 include include include ...