BZOJ4517 排列計數(錯排公式)

2021-08-13 09:30:20 字數 2610 閱讀 4352

從開始看這題到現在,已經過了30多把lol的時間了。

話說今天又有一道排列計數的題讓我懵逼。

題面題意:問有多少長為n的排列a,恰好有m個位置存在a[i]=i。

我們列舉這n-m個a[i]≠i位置,有cm

n 種情況。

對於x個數的排列,不存在a[i]=i的方案數設為f[x]。經過簡單的打表可以發現f[

i]=f

[i−1

]∗i+

(−1)

i 就可以水出這題了。

但是像千反田一樣好奇的我非常好奇,學習了一下機巧的二項式反演。

我曾聽說過廣義容斥原理

講的是對於乙個含有n個條件的集合,全集為p。f[i]為恰好滿足i個條件的方案數,w[s]為滿足集合s中條件的方案數,g[s]為s的元素個數。公式為 f[

r]=∑

s⊆p(

−1)g

[s]−

r∗cr

g[s]

∗w[s

] 我們設h[x

]=∑g

[s]=

xw[s

] 就有f

[r]=

∑i=r

n(−1

)i−r

∗cri

∗h[i

] 再回想h的計算方法,有 h[

r]=∑

i=rn

crif

[i]⇔

f[r]

=∑i=

rn(−

1)i−

r∗cr

i∗h[

i]變形一下(我並不懂怎麼變形,但每條柿子我都會證明),有h[

r]=∑

i=0r

cirf

[i]⇔

f[r]

=∑i=

0r(−

1)r−

i∗ci

r∗h[

i]再有h[

r]=∑

i=0r

(−1)

icir

f[i]

⇔f[r

]=∑i

=0r(

−1)i

∗cir

∗h[i

] 證一下最後一條吧 ∑i

=0r(

−1)i

cirf

[i]

=∑i=

0r(−

1)ic

ir∑j

=0i(

−1)j

∗cji

∗h[j

] =∑

i=0r

∑j=0

i(−1

)i(−

1)jc

ir∗c

ji∗h

[j]

=∑i=

0r∑j

=0i(

−1)i

−jcj

r∗ci

−jr−

j∗h[

j] =

∑j=0

rcjr

∗h[j

]∑i=

jr(−

1)i−

j∗ci

−jr−

j 由於對於楊輝三角的每一行,奇數項之和等於偶數項之和,故 =f

[r]

有n個集合,假若設任意i個集合的並集大小都為f[i],任意i個集合的補集的並集的大小都為h[i](不知道這樣的集合存不存在),就有h[

r]=∑

i=0r

(−1)

icir

f[i]

f[r]=∑i

=0r(

−1)i

∗cir

∗h[i

] 對於錯排,設f[i]為i個數錯排的方案。

顯然有∑i=

0nci

nf[i

]=n!

反演過來就有f[

n]=∑

i=0n

(−1)

n−i∗

cin∗

i! =

n!∑i

=0n(

−1)i

i!終於打完了,嘟嘟嚕。

還是紗霧的水題專場

排列計數(bzoj 4517)

求有多少種長度為 n 的序列 a,滿足以下條件 1 n 這 n 個數在序列中各出現了一次 若第 i 個數 a i 的值為 i,則稱 i 是穩定的。序列恰好有 m 個數是穩定的 滿足條件的序列可能很多,序列數對 10 9 7 取模。第一行乙個數 t,表示有 t 組資料。接下來 t 行,每行兩個整數 n...

bzoj4517 sdoi2016 排列計數 錯排

題目大意 給定n,m。求排列個數,排列滿足 1 是全排列的一種。2,有且僅有m個數a i i。嗯,今天 第一次 聽說了個錯排這個東西。誒。不過開心,smz妹子給我講噠 錯排就是求n的排列個數,排列滿足不存在a i i。可以遞推來完成。f i i 1 f i 1 f i 2 證明 第i個元素可以選擇和...

bzoj 4517 Sdoi2016 排列計數

求有多少種長度為 n 的序列 a,滿足以下條件 1 n 這 n 個數在序列中各出現了一次 若第 i 個數 a i 的值為 i,則稱 i 是穩定的。序列恰好有 m 個數是穩定的 滿足條件的序列可能很多,序列數對 10 9 7 取模。第一行乙個數 t,表示有 t 組資料。接下來 t 行,每行兩個整數 n...