組合計數,第一類斯特林數 洛谷 4609 建築師

2021-09-27 03:18:07 字數 1245 閱讀 1495

問有多少個1∼n

1\sim n

1∼n的排列,滿足從左邊只走上坡能看到a

aa個數,從右邊只走上坡能看到b

bb個數

那麼先把最高值分開,那麼左邊有a−1

a-1a−

1個,右邊有b−1

b-1b−

1個,那麼共有a+b

−2

a+b-2

a+b−

2個,而樣子類似合唱隊形還可以旋轉,所以其實就是在n−1

n-1n−

1個數中坐在a+b

−2

a+b-2

a+b−

2個圓桌的方案數,再選擇a+b

−2

a+b-2

a+b−

2個數中選擇a−1

a-1a−

1個放左邊,那麼總而言之,答案就是

c (a

+b−2

,a−1

)∗st

irli

ng(n

−1,a

+b−2

)c(a+b-2,a-1)*stirling(n-1,a+b-2)

c(a+b−

2,a−

1)∗s

tirl

ing(

n−1,

a+b−

2),後面是第一類斯特林數,時間複雜度o(n

a+t)

o(na+t)

o(na+t

)

#include

#include

#define rr register

using

namespace std;

const

int n=

50001

,m=201

,mod=

1e9+7;

int stir[n]

[m],c[m]

[m];

inline

signed

iut(

)inline

void

print

(int ans)

inline

signedmo(

int x,

int y)

signed

main()

for(rr int t=

iut(

);t;

--t)

return0;

}

洛谷P5408 第一類斯特林數 行

給定 n 1 leq n le 262144 對於所有的整數 i in 0,n 求出 pmod 考慮第一類斯特林數的生成函式 sum x k x 其中生成函式的 k 次項的係數就是我們要求的第一類斯特林數。考慮倍增。x x x n 記 f x x 假設我們已經知道了 f x 如何去求出 f x n ...

HDOJ 4372 第一類斯特林數

有一系列的樓房,高度從1 n,然後從左側看能看到f個樓房,右側看能看到b個樓房,問有多少個方案數滿足。首先我們知道乙個結論 n的環排列的個數與n 1個元素的排列的個數相等,因為p n,n n n 1 可以肯定,無論從最左邊還是從最右邊看,最高的那個樓一定是可以看到的.假設最高的樓的位置固定,最高樓的...

HDU 3625 第一類斯特林數

第一類斯特林數 n 個人坐在 r個圓桌的方案數 hdu2625 他要最多破 k 個門,即形成最多 k 個迴圈,不能單獨乙個形成迴圈,這樣不合法,自己房間的鑰匙放在自己的房間裡面。第一類斯特林數 n個球放成r個非空迴圈 includeusing namespace std const int maxn...