問題
提出コード
DPをします。
まずは、下準備をします。
ある高さについて、幅がのとき(つまり、
本の棒があるとき)に、横線の置き方がいくつあるかを計算します。
これをとします。
のとき、横線はおけないので
です。
のとき、横線を置くか置かないかの2通りです。よって
です。
のときについて考えます。
横線を置くと1、置かないと0とすると、
00,01,10の3通りです。
です。
これ以降については、実はフィボナッチ数列のようになっています。
幅がのとき、一番右側に横線を置くか置かないかで場合分けをします。
横線を置かないとき
一番右端を除く、の幅についての置き方を考えればよいので、これは
になります。
横線を置くとき
一番右端に横線を置くと、その左側は自動的に横線を置くことができなくなります。
残ったの幅については自由に置くことができるので、これは
になります。
ということで、
となります。
の最大値が8なので、これは手計算で求めてもいいですし、プログラムを書いて
で求めてもいいと思います。
さて、答えの数え上げをしていきます。
一番上の高さのときに、一番左の棒からスタートしたときに、上から
番目の高さにいるときに、左から
番目にたどり着くようなものの個数
とします(は0-indexedとします)。初期状態は、
です。
すると、
のときに、
、
、
の3つのどこかにいる必要があります。
それぞれ、のときに、左上、真上、右上にいて、そこから横線を通り(または通らず)、今の場所に移動します。
左(右)上から移動してくる場合
考えることは同じなので、今回は左上から移動する場合についてのみ考えます。
番目の棒線にたどり着くとき、
と
の区間に横線を引くため、
と
および
と
の区間には、横線があってはいけません。
ですが、それ以外の部分は自由に横線をひくことができます。
この部分は、より左側と右側に分割することができ、幅がそれぞれ
と
になります。
ということで、この二つの幅についての横線の置き方は、を参照することで求められます。
あとは、その二つとを掛け算すればよいので、
となります。
同様にすると、右上から移動するパターンは
となります。移動せずに降りてくる場合
の左右には横線があってはいけません。しかし、それ以外は横線を自由に置くことができます。ということで、次のようになります。
ということで、この3つの式の和がの値になります。
これを計算していくと、答えがにあります。