解法
bitDPです。だんだん詰め合わせ感が増えてきました。
同じ階層で
から
に移動するパターン数
とすると、これをの行列に見立てて
乗すると、
が答えになります。
を求めることさえできれば、あとはこの行列式の
を求めていき、
程度で答えが求まります。
ということで、この行列式を完成させることを考えます。
から
の部屋を通り、
にいくパターン数
とします。部屋がまでしかないので、通る部屋の状態
をビット列で持つことができます(自分は、スタート地点とゴール地点の
両方のビットも立てました)。
このとき、は、
の全ての状態
に対する総和になります。
このDPは、スタート地点から幅優先探索をすることで求めることができます。
今、の部屋を通り、
の部屋にいるとします。すると、
に含まれていないかつ、
からいくことのできる部屋
については、部屋
が
で表されることを利用して、
という遷移を行えばよいです。
ということで、すべての部屋をスタート地点に選んだ幅優先探索を行い、このDPを埋めることで、を完成させることができます。
あとは、乗すれば、答えが求まります。