問題. ソーシャルゲーム
種類のカードと
種類のくじがある.
番目のくじを引くのにかかる費用は
で,くじを引いたときに得られるカードの集合を
とする.また,
番目のくじを引いて
番目のカードが当たる確率を
とする.
最適な戦略でくじを引いて全種類のカードをコンプリートするまでにかかる費用の期待値を答えよ.
制約: ,
,
解法.期待値 + 動的計画法
カードの集合を ,くじの集合を
とする.最適な戦略でくじを引いていくときに,どのくじを選択すればよいかの判断材料は今までに得られたカードの情報のみであることが分かる.そこで,任意のカードの部分集合
に対して確率変数
を「現在,カード
が手元にある状態からコンプリートするまでにかかる最小費用」と定義する.このとき初期状態は
であり,求める答えは
] である.この期待値を動的計画法で求めることを考える.
] を求めるために,さらに確率変数を定義する.任意の
と
に対して確率変数
を「現在,カード
が手元にある状態から,次に
番目のくじを引くと決めたときにコンプリートするまでにかかる最小費用」と定義する.また,任意の
と
に対して
を「くじ
を選択してカード
を引く事象」とする.ここで,任意の
に対して,
となる.右辺の各引数をさらに展開すると
となる.1番目の等号は全期待値の法則を用いて,5番目の等号は を用いている.さらに(☆)から
となるので,
である.これを整理すると
となる.上式は定義から等号を与えるくじ番号が存在するので,任意のくじに対して計算した右辺の値の最小値を に代入すればよい.さらに,
なので bitDP で計算しても間に合う.注意として
は降順に遷移を行い,上式の右辺の分母が 0 になる場合,すなわち
番目くじを引いても新たにカードを得られない場合は除外して計算する必要がある.
問題の入力データ は百分率で与えられるので下のソースコードでは上式を少し変形している.
計算時間:
今まで曖昧にしてきた確率DPをしっかり書くということをやってみたけど大変.たぶんここまで詳細に書くことは今後ない気がする.