问题转化:
初始时有火焰的格子记为 1,干燥柴堆记为 0。每次操作可以选择一个已燃烧的格子,将火焰蔓延到相邻的未燃烧格子,并记录该次被点燃的格子编号。所有格子最终都要被点燃,求不同点燃序列的总数。
连续 0 段的内部顺序:
将连续的 0 看作一个独立段落。设一段连续 0 的长度为 k。
1 之间),则点燃这段内部的顺序有 2k−1 种:每次都可以选择从左边或右边相邻的已燃格子向段内蔓延,直到最后一个格子只有一种选择。在一片狭长的草原上,有 n 个连续的格子排成一列,编号从左到右依次为 0 到 n−1。初始时,部分格子中已有火焰(用 '1' 表示),其余格子则是干燥的柴堆(用 '0' 表示)。
你可以执行多次操作,每次操作规则如下:选择一个当前有火焰的格子 i,若其相邻的格子 j(j=i−1 或 j=i+1)尚未燃烧,则可以将火焰蔓延过去,使格子 j 也燃起火焰。你的目标是让所有格子最终都燃起火焰。
操作序列可以用依次被点燃的格子编号来记录(即每次选择燃起的那个格子)。不同的蔓延顺序可能导致不同的点燃序列。请你统计一共有多少种不同的点燃序列能够将所有格子点燃。
由于答案可能很大,请将其对 109+7 取模后输出。
数据范围:
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.