母函式問題

2021-08-21 16:41:45 字數 1800 閱讀 3929

在數學中,某個序列的母函式(generating function,又稱生成函式)是一種形式冪級數,其每一項的係數可以提供關於這個序列的資訊。使用母函式解決問題的方法稱為母函式方法。

先看兩個例子:

第一種:

有1克、2克、3克、4克的砝碼各一枚,能稱出哪幾種重量?每種重量各有幾種可能方案?

考慮用母函式來解決這個問題:

我們假設x表示砝碼,x的指數表示砝碼的重量,這樣:

1個1克的砝碼可以用函式1+1*x^1表示,

1個2克的砝碼可以用函式1+1*x^2表示,

1個3克的砝碼可以用函式1+1*x^3表示,

1個4克的砝碼可以用函式1+1*x^4表示,

我們拿1+x^2來說,前面已經說過,x表示砝碼,x的指數表示砝碼的重量!初始狀態時,這裡就是乙個質量為2的砝碼。

這裡1+1*x^2 = 1*x^0 + 1*x^2,即表示2克的砝碼有兩種狀態,不取或取,不取則為1*x^0,取則為1*x^2

這裡的係數表示狀態數(方案數),而指數則相當於這個東西的權重(即價值)。

1+x^2,也就是1*x^0 + 1*x^2,也就是上面說的不取2克砝碼,此時有1種狀態;或者取2克砝碼,此時也有1種狀態。

幾種砝碼的組合可以稱重的情況,可以用以上幾個函式的乘積表示:

(1+x)(1+x^2)(1+x^3)(1+x^4)

=(1+x+x^2+x^4)(1+x^3+^4+x^7)

=1 + x + x^2 + 2*x^3 + 2*x^4 + 2*x^5 + 2*x^6 + 2*x^7 + x^8 + x^9 + x^10

從上面的函式知道:可稱出從1克到10克,係數便是方案數。

第二種:

求用1分、2分、3分的郵票貼出不同數值的方案數:

大家把這種情況和第一種比較有何區別?第一種每種是乙個,而這裡每種是無限的。

故g(x)=(1+x^1+x^2+....)(1+x^2+x^4+....)....(1+x^n+x^2n+....)....

這裡是乙個整數劃分方案個數的模板,計算的方法是模擬手算,從前向後乙個接乙個的括號計算:

#includeusing namespace std; 

int c1[10001], c2[10001], n; //n是要被劃分的整數,c1是用來存放展開式的各項係數,c2用來計算時臨時儲存的

int main()

for (int i = 2; i <= n; i++) //計算從第二個括號表示式開始

for (int i = 0; i <= n; i++) //更新一下資料,開始下乙個括號表示式的計算

}cout << c1[n] << endl; //輸出指數為n的項的係數是多少,則有多少種劃分

} return 0;

}

板子題目:

題目:

#include#includeusing namespace std; 

int num1, num2, num3;

int vis[10000];

int main()

} for (int i = 0; i <= num3 * 5; i += 5) //計算第三個

}int i;

for (i = 1; i <= num1 + num2 * 2 + num3 * 5; i++)

}printf("%d\n", i);

} return 0;

}

母函式問題

母函式可分為很多種,包括普通母函式 指數母函式 l級數 貝爾級數和狄利克雷級數。對每個序列都可以寫出以上每個型別的乙個母函式。構造母函式的目的一般是為了解決某個特定的問題,因此選用何種母函式視乎序列本身的特性和問題的型別。我們首先來看下這個多項式乘法 由此可以看出 1.x的係數是a1,a 2,a n...

母函式問題

首先說下母函式定義 生成函式即母函式,是組合數學中尤其是計數方面的乙個重要理論和工具。生成函式有普通型生成函式和指數型生成函式兩種,其中普通型用的比較多。形式上說,普通型生成函式用於解決多重集的組合問題,而指數型母函式用於解決多重集的排列問題。母函式還可以解決遞迴數列的通項問題 例如使用母函式解決斐...

ACM 母函式問題模板

include using namespace std const int lmax 10000 int c1 lmax 1 c2 lmax 1 c1是儲存各項質量砝碼可以組合的數目 c2是中間量,儲存每一次的情況 int main 初始化 for i 0 i n i c1 i 1 首先對c1,第乙...