AtCoder Biginner Contest 263 参加記録
コンテストページ:LINE Verda Programming Contest(AtCoder Beginner Contest 263) - AtCoder
コンテスト中AC: A〜E
E - Sugoroku 3
期待値DPが使えます。
サイコロを振ることを操作と呼ぶことにします。
マスからマスまでにかかる操作回数の期待値をとします。
マスからは、マスに行くことができます。
とおけば、それぞれのマスにはの確率で移動します。
また、マスに辿りつくと、マスからは(平均して)回の操作でマスに行けます。からに行くのに操作を1回行うので、マスからマスを経由してマスに辿りつくには回の操作が必要になります。
以上から、以下の式が成り立ちます。
さて、この式には右辺・左辺の両方にがあるので、左辺に移行します。
この式より、が求まっているとが求められます。
同じマスに戻るような場合、一見無限回の試行が必要なように思えますが、
このように式変形すると問題なく求められる場合があります。
次に、期待値を求めていきますが、マスの移動先が少なければメモ化再帰等で愚直に求めていくことができます。 しかし、今回は移動先が多いためとなってしまうので、もう少し工夫する必要があります。
前述の式を更に整理します。
したがって、
となります。 の部分を高速に求められればよく、連続した区間の和なのでFenwick Treeによりで求められます。
以上より、を初期値として、の順にを求めていくことで、
でこの問題を解くことができます。
(累積和を用いれば計算量が落ちるかもしれません)
Submission #33834218 - LINE Verda Programming Contest(AtCoder Beginner Contest 263)