失败是无可原谅,成功是理所应当……对吗?
# 题目
> Vjudge
有 $N$ 只椅子排成一个环,现在来了 $M$ 个人,依次选择一个空的位置入座。一个“段”为最长的已经有人的连续一段椅子。
要求任意时刻,段的数量不超过 $G$。求最后入座的情况的方案数,两种入座情况被视作不同当且仅当存在至少一个椅子,椅子上坐的人不同(人有编号)。
答案对 $10^9+7$ 取模。
# 解析
发现因为有空位置,并不好处理“任意时刻段数不超过 $G$” 的限制。因此想到先忽略掉空位置,只考虑 $M$ 个人入座,形成若干段,保证段数不超过 $G$。
那么可以 DP,f[i][j]
表示前 $i$ 个人入座,形成了 $j$ 个段的方案数。按照这个定义,初始状态为“第一个人入座形成一个段”,而且第一个人有 $n$ 个位置可以选:f[1][1]=n
。
考虑转移,当第 $i+1$ 个人入座时:
- 新形成一个段:这个新形成的段的位置可以在任意两个已有的段之间,共 $j$ 个可选位置 ——
f[i+1][j+1]+=f[i][j]*j
- 放在两个段之间合并成为一个段(需要保证至少有两个段),共 $j$ 个可选位置 ——
f[i+1][j-1]+=f[i][j]*j
放在任意一个段的前/后,共 $j$ 段,每个段可以放在前或后(2种)——
f[i+1][j]+=f[i][j]*2*j
> Tab.
有特殊情况是 $M=N$ 时,放最后一个人的时候只存在一种放法,因为此时只剩一个段,而且段前面的位置和段后面的位置是同一个。即
i+1=n
时f[i+1][j-1]+=f[i][j]*j
最后考虑把空位放到各个段之间,枚举最后的段数 $j$:
段与段之间必须有空位,相当于 $j$ 个盒子;剩下 $n-m$ 个空位放在段与段之间,相当于 $n-m$ 个球;要求每个盒子不空,那么运用隔板法就知道方案数为 $C_{n-m-1}^{j-1}$,则 $ans=\sum\limits_{j=1}^{G}f[m][j]\times C_{n-m-1}^{j-1}$。
> Tab.
$N=M$ 仍然是特殊情况,此时没有空位,实际上是个圆排列。对于圆排列,确定了前 $m-1$ 个人的入座情况后,第 $m$ 个人只能坐剩下的那个位置了,所以方案数为
f[m-1][1]
。
# 源代码
1 | /*Lucky_Glass*/ |