從開始看這題到現在,已經過了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...