組合數與生成母函式

2021-08-26 14:54:21 字數 1254 閱讀 6217

參考:

母函式與排列組合:

// n1為最少數量陣列,n2為最大數量陣列,v為權值,p為最大值

//為計算結果,b為中間結果。

int a[max],b[max];

//初始化a

memset(a,0,sizeof(a));

a[0]=1;

for (int i=1;i<=17;i++)//迴圈每個因子

//初始化a,因為有last,所以這裡無需初始化其他位  

a[0]=1;

intlast=0;

for (int i=0;iint last2=min(last+n[i]*v[i],p);//計算下一次的last

memset(b,0,sizeof(int)*(last2+1));//只清空b[0..last2]

for (int j=n1[i];j<=n2[i]&&j*v[i]<=last2;j++)//這裡是last2

for (int k=0;k<=last&&k+j*v[i]<=last2;k++)//這裡乙個是last,乙個是last2

b[k+j*v[i]]+=a[k];

memcpy(a,b,sizeof(int)*(last2+1));//b賦值給a,只賦值0..last2

last=last2;//更新last

}

生成函式題集

一、hdu 1085和hdu 1171兩題套用了第二個模板,省略了**中二三層迴圈裡關於last2的條件(其實也可以加上)。

詳見:hdu 1085:

hdu 1171:

二、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:

組合數學 母函式

在數學中,某個序列的母函式 generating function,又稱生成函式 是一種形式冪級數,其每一項的係數可以提供關於這個序列的資訊。使用母函式解決問題的方法稱為母函式方法。母函式可分為很多種,包括普通母函式 指數母函式 l級數 貝爾級數和狄利克雷級數。對每個序列都可以寫出以上每個型別的乙個...

組合數學 1 母函式與整數拆分

是組合數學的核心。筆者認為,母函式作為函式並不和我們以前所學習的函式一樣,著重於自變數的值以及因變數的值,包括其變化趨勢 奇偶性等等性質。而是作為乙個載體,乙個媒介,將數字與現實生活中的具體方案給串聯起來。母函式的定義 對於任意數zd列a0,a1,a2 an 即用如下方法與版乙個函式聯絡起來 g x...

母函式與排列組合

母函式與排列組合 在談論母函式問題之前,我們先看乙個簡單的問題描述 假如有兩組資料 a,b 和 c,d 每組中選出乙個構成乙個組合,總共有幾種選法?很顯然總共有4種選法 ac,ad,bc,bd。而且很容易聯想到這個式子 a b c d a c a d b c b d。式子中的幾個乘積項就是上面的4種...