ARC 016 C - ソーシャルゲーム
既に持っているアイドルの集合S⊆{1,...,N}が与えられたとき、そこからアイドルをコンプリートするのに必要な金額の期待値をf(S)としてDPする。
くじjを引いた時にアイドルiが出る確率をpj,i′とする。くじが1つしかない場合は
f(S)=cost1+i∈{1,...,N}∑f(S∪{i})p1,i′=cost1+i∈/S∑f(S∪{i})p1,i′+i∈S∑f(S)p1,i′
が成り立つから、f(S)について解くと
f(S)=(cost1+i∈/S∑f(S∪{i})p1,i′))(1−i∈S∑p1,i′)−1(∗)
である。しかし、くじが複数の場合は
f(S)=jmin(costj+i∈/S∑f(S∪{i})pj,i′+i∈S∑f(S)pj,i′)
となって、これは単純には解けないように見える……が、よく考えると最適な引き方はSのみによって決まるのだから、状態Sの時にありえる引き方は、新しいアイドルが出るまでくじ1を引き続ける・くじ2を引き続ける・…・くじMを引き続けるのM通りである。そこで、手持ちのアイドルがSの場合にくじjを引き、それ以外は最適な引き方をする時の期待金額をfjで表すと、f(S)=minjfj(S)である。fjの漸化式も上と同様に書けて
fj(S)=costj+i∈/S∑fj(S∪{i})pj,i′+i∈S∑fj(S)pj,i′=costj+i∈/S∑f(S∪{i})pj,i′+i∈S∑fj(S)pj,i′
(二行目はS⊊S′⇒fj(S′)=f(S′)から従う。Sに含まれているアイドルをすべて持っていてSではない状態に対してはfjとfは同一である。) 同様にfj(S)について整理すると(∗)とまったく同じ式になり、最終的な漸化式は
f(S)=jminfj(S)=jmin((costj+i∈/S∑f(S∪{i})pj,i′))(1−i∈S∑pj,i′)−1)
となる。
http://kyopro.hateblo.jp/entry/2019/07/15/013501
sdfi13jfxさんの記事がいちばん参考になった。