1. 程式人生 > >HDU 4372 Count the Buildings——第一類斯特林數

HDU 4372 Count the Buildings——第一類斯特林數

題目大意:
n幢樓,從左邊能看見f幢樓,右邊能看見b幢樓

樓高是1~n的排列。

問樓的可能情況

 

把握看到樓的本質!

最高的一定能看見!

計數問題要向組合數學或者dp靠攏。但是這個題詢問又很多,難以dp

如果把能看見的和之後擋住的看成一組的話。。。

那麼可以看成這樣:

每一組要固定第一個,,後面可以隨便動,n!/n=(n-1)!

第一類斯特林數圓排列!

可分成的組數是:S[n-1][f+b-2](扣除中間最高的)

每一個圓排列只有最大值靠前的唯一展開方式

所以方案數是S[n-1][f+b-2]*C(f+b-2,f-1)(分出這麼多組,再選擇f-1個放在前面,之後的方案就唯一確定了!)

 

總結:

思路就是考慮分組,然後找到第一類斯特林數的相似點、