組合數學 習題 HDU 2152

2021-09-21 06:27:00 字數 3035 閱讀 9614

思路** (c 語言)

總結轉眼到了收穫的季節,由於有tt的專業指導,lele獲得了大豐收。特別是水果,lele一共種了n種水果,有蘋果,梨子,香蕉,西瓜……不但味道好吃,樣子更是好看。

於是,很多人們慕名而來,找lele買水果。

甚至連大名鼎鼎的hdu acm總教頭 lcy 也來了。lcy丟擲一打百元大鈔,「我要買由m個水果組成的水果拼盤,不過我有個小小的要求,對於每種水果,個數上我有限制,既不能少於某個特定值,也不能大於某個特定值。而且我不要兩份一樣的拼盤。你隨意搭配,你能組出多少種不同的方案,我就買多少份!」

現在就請你幫幫lele,幫他算一算到底能夠賣出多少份水果拼盤給lcy了。

注意,水果是以個為基本單位,不能夠再分。對於兩種方案,如果各種水果的數目都相同,則認為這兩種方案是相同的。

最終lele拿了這筆錢,又可以繼續他的學業了~

本題目包含多組測試,請處理到檔案結束(eof)。

每組測試第一行包括兩個正整數n和m(含義見題目描述,0對於每組測試,在一行裡輸出總共能夠賣的方案數。

題目資料保證這個答案小於10^9

母函式的應用

對於每種水果 fru

it

ifruit_i

fruiti

​ 的上下界設為 ai,

bi

a_i, b_i

ai​,bi

​ 並設 ci=

bi−a

i+

1c_i = b_i-a_i+1

ci​=bi

​−ai

​+1則母函式可以寫為

∏ i=

1n(x

ai+x

ai+1

+...

+abi

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

∏i=1n​

(xai

​+xa

i​+1

+...

+abi

​)化簡 (等比數列求和) 為

∏ i=

1n(x

ai1−

xci1

−x

)\prod_^n(x^\frac})

∏i=1n​

(xai

​1−x

1−xc

i​​)

進一步化簡為

x ∑i

=1na

i×∏i

=1n(

1−xc

i)×∑

i=1n

(cn−

1+ii

xi

)x^^n a^i}\times \prod_^n (1-x^) \times \sum_^n(c_^ix^i)

x∑i=1n

​ai×

∏i=1

n​(1

−xci

​)×∑

i=1n

​(cn

−1+i

i​xi

)問題要求上式中 x

mx^m

xm的係數

上式可以分為三部分, 左邊部分直接累加得到, 即

設 t ot

al=∑

i=1n

ai

total=\sum_^na^i

total=

∑i=1

n​ai

那麼原問題等價於求

f (x

)=∏i

=1n(

1−xc

i)×∑

i=1n

(cn−

1+ii

xi

)f(x)= \prod_^n (1-x^) \times \sum_^n(c_^ix^i)

f(x)=∏

i=1n

​(1−

xci​

)×∑i

=1n​

(cn−

1+ii

​xi)中xm

−tot

al

x^xm

−tot

al的係數對於累乘項 ∏i=

1n(1

−xci

)\prod_^n (1-x^)

∏i=1n​

(1−x

ci​)

, 直接暴力展開 (因為 m−t

otal

≤100

m-total \le 100

m−tota

l≤10

0, 所以 最多迴圈 m

×100

m\times100

m×10

0 次, 可以接受)

對於累加項 ∑i=

1n(c

n−1+

iixi

)\sum_^n(c_^ix^i)

∑i=1n​

(cn−

1+ii

​xi)

, 由於問題沒有要求取模, 所以沒法用階乘來算 (因為最高需要 200 的階乘), 所以我使用楊輝三角來建表計算.

#include

#include

long

long coeff[

101]

;long

long temp[

101]

;long

long c[

100]

[100];

int m, n;

long

long

mom(

int i)

intmain()

while

(scanf

("%d%d"

,&n,

&m)!=

eof)

int need = m - total;

long

long ans =0;

for(

int j =

0; j <= need; j++

)printf

("%lld\n"

, ans);}

}

乙個月前的我可能看見母函式就一臉懵逼, 現在總算是會一點了qaq

組合數學學習

圓排列和項鍊排列 問題 八個人圍在乙個桌子吃飯,怎麼坐?先簡單看看 這是乙個圓排列,我們可以把它變成線排列。可以知道我們可以從4個方面剪開這個環得到4種排列。2341 1234 3412 4123 如果從n個數中取r個進行線排列 p n,r 種方法。但如果是圓排列呢,由上面的例子可知四個線排列就等於...

hdu 1220 Cube 組合數學

給你乙個邊長n的正方體,切割成n n n個單位體積的小正方體,求所有公共頂點數 2的小正方體的對數。公共點的數目可能有 0,1,2,4.我們用總的對數減掉有四個公共點的對數就可以了。總的對數 n 3 n 3 1 2 一共有n 3塊小方塊,從中選出2塊 而4個交點的立方體對是兩個立方體共面的情況,所以...

hdu5160 Apple 組合數學

問題描述 現在要給n個小朋友發蘋果,每乙個小朋友都會有自己相應的蘋果數目 cdots a 1 a 2 a 3 a n 發蘋果的時候,小朋友先從左到右隨機站成一排。設站好後從左到右小朋友的標號是 cdots p 1 p 2 p 3 p n 他們所需要的蘋果數目是 cdots a p 1 a p 2 a...