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