母函式運用

2021-08-24 20:53:23 字數 2233 閱讀 4537

有n

nn種物品,第i

ii件物品的價值為vivi

vi,你拿它的數量下限為n1i

n1_i

n1i​

,上限為n2i

n2_i

n2i​

那麼就可以生產以下母函式:

∏ i=

1n(x

vi∗n

1i+x

vi∗(

n1i+

1)+.

..+x

vi∗(

n2i−

1)+x

vi∗n

2i

)\prod_^n\big( x^+x^+...+x^+x^ \big)

i=1∏n​

(xvi

∗n1i

​+xv

i∗(n

1i​+

1)+.

..+x

vi∗(

n2i​

−1)+

xvi∗

n2i​

) 對其運算結果b0∗

x0+b

1∗x1

+...

+bma

x∗xm

ax

b_0*x^0+b_1*x^1+...+b_*x^

b0​∗x0

+b1​

∗x1+

...+

bmax

​∗xm

ax, x

ix^i

xi的係數b

ib_i

bi​即為取總價值為i

ii的方案數

在數學的角度上看,到了每乙個i

ii,只要拿出這個大項中的每乙個小項a∗x

ja*x^j

a∗xj

去乘之前得到的b∗x

kb*x^k

b∗xk

,再把a∗b

a*ba∗

b加到xj+

kx^

xj+k

裡面就可以了

不過在演算法的角度,好吧,也沒設麼優化,只能暴力了

**:

#include

using

namespace std;

const

int n=

1000

;int a[n]

,b[n]

;//x^i的係數

int v[n]

,n1[n]

,n2[n]

;int n,p;

//物品數,總上限

intmain()

}memcpy

(a,b,

sizeof

(int)*

(last2+1)

);//b賦值給a,只賦值0..last2

last=last2;

//更新last

}}

原題:hdu 2083

題意:

26個字母各a[i]個,a的價值為1,z為26,求有多少種選擇方式(無順序)組成的單詞價值少於等於50

解析:

模板的不能再模板了吧,巧的是,我之前不知道母函式的時候用的是多重揹包,現在感覺**都差不多

**:

#include

using

namespace std;

const

int n=

10000

;int a[n]

,b[n]

;//x^i的係數

int v[30]

,n1[30]

,n2[30]

;int n,p;

//物品數,總上限

intmain()

}memcpy

(a,b,

sizeof

(int)*

(last2+1)

);//b賦值給a,只賦值0..last2

last=last2;

//更新last

}int ans=0;

for(

int i=

1;i<=

50;i++

)ans+

=a[i]

;printf

("%d\n"

,ans);}

}

生成函式 母函式

根據定義,這個序列作為函式的係數,稱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 ...