Educational DP Contest / DP まとめコンテスト J - Sushi
問題
提出コード
Sushi問題は難しいことで有名です(要出典)
解法
ループする系の期待値は、こんな感じで立式すると見えてきます。
今回は、お皿にのっているお寿司の数を利用します。
3個のっている寿司が皿、2個が皿、1個が皿だとして、そこから全ての寿司を食べるまでにサイコロを振る回数の期待値をとします。
すると、3個のっているお皿の寿司を食べるとそのお皿にのっている寿司の個数が2に、2個のっているお皿は1個に、1個は0個になることを考えると、次のような式がなりたちます。
さて、この式にはが2箇所出てきているので、このままでは解くことができません。ので、両辺を整理すると、次のような式が出来上がります。
あとは、この式をコードに落とし込めば、この問題を解くことができます。
を上の遷移に当てはめてしまうと、0で割ることになってしまうので、別枠で0と初期化しておくことに気を付けます。答えは、入力されたの3~1の個数をそれぞれとしたとき、となります。