[数学最安逸][UVa1638改编][第一类斯特林数+组合数]杆子的排列
有高為1,2,3,...,n的桿子各一根排成一行。從左邊能看到l根,從右邊能看到r根,求有多少種可能。 (l,r <= 200,n <= 200000)
給出T 組數據 (T <= 500000)? 對于每一組數據輸出可能的個數,為避免寫高精,將答案模 1e9 + 7 (它為質數,但似乎沒蛋用)
?關于 O(TnLR) 或 O(nMAX(L,R)) 預處理,O (n) 查詢的解法已有,現在我來安利安利汪神的無敵解法,我現在只服汪神!!!
先說答案,答案為s(n-1,l+r-2) * C(l + r - 2,l - 1) (s為第一類斯特林數,c為組合數)
證明
圖中畫出的柱子是能被看出的,每根柱子后面一定有比它小的柱子,但這些柱子隨便怎么排都無所謂,所以對于一根柱子來說,設它和它背后比它低的柱子個數為k。
那么比它低的柱子有k-1個,排列方式為(k-1)!
設能被看到的柱子和后面比它低的柱子為一個集合,那么全場共有(l + r - 2) 個集合(忽略最高的柱子)。只要我們找出了這(l + r - 2)個集合,那么就一定能構成上圖(每個集合最高的柱子作為這個集合的代表)
那么我們找出這(l+r-2)個不同的集合的方案數為s(n-1,l+r-2)。為什么是這樣呢?
顯然,對于一個集合而言,如果其他l+r-3個集合不變,那么他就一定會變,因為是找圓排列,它只會變(k-1)! 次(k為此集合大小)。。。
剛好這個集合除了代表元素也只有(k-1)!種排列,所以是正確的。。。(我不知道之前的算不算口胡,汪神說只可意會,是非完美證明)
我們在選出的(l+r-2)個中選出l-1個作為左邊的就好了 因此就乘上組合數
轉載于:https://www.cnblogs.com/dcoi-king/p/5353658.html
總結
以上是生活随笔為你收集整理的[数学最安逸][UVa1638改编][第一类斯特林数+组合数]杆子的排列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到好多壁虎是什么意思呢
- 下一篇: 梦到水池里有蛇预示着什么