题目链接:https://codejam.withgoogle.com/codejam/contest/3324486/dashboard#s=p2&a=2
一共有2n个座位排成一排,现在有m对人去坐,每对人之间有顺序。每对人均不可以相邻,问一共有多少种坐法?
考虑用总的排列数减去每对人都相邻的情况,于是我们发现后者的排列是可以容斥的。
设f(k)表示k对人均坐在一起的排列数,那么答案就是:
m∑k=0(−1)kf(k)
f(k)也比较容易算,可以由下面几个部分组合起来:
- m对中任取k对:C(m,k)
- 每对人有顺序,那么所有可能的排列就是2k
- 在2n个位置里面挑k对位置,将两个相邻位置看成一个座位,那么相当于2n−k个位置的排列,那么总计一共有(2n−k)!种排列。
于是f(k)=C(m,k)2k(2n−k)!
1 |
|
v1.5.2