No.031 D
得られた経験値を , 使ったお金を として とおくと, となる最大の を求める問題となる.
これを最小カット問題に帰着させる.
条件は以下のようになる.
- 番目の経験値をもらうと かかる. もらわないと かかる. (最小を求めるので逆にする)
- 番目のアイテムを買うと かかる. 買わないと かかる.
- 番目のアイテムを買わないとき, 番目のアイテムが必要な 番目の経験値をもらうと かかる.
これをグラフにすると, 以下のようになる.
- ソースから 番目の経験値に の辺を, 番目の経験値からシンクに の辺を張る.
- ソースから 番目のアイテムに の辺を, 番目のアイテムからシンクに の辺を張る.
- 番目のアイテムから 番目のアイテムが必要な 番目の経験値に の辺を張る.
このグラフの最小カットを Dinic 法などで求める. この最小カットは なので, であるためには であればいい.
ただし, 誤差によって最大フローが より微妙に小さくなる可能性がある. そこで, 倍した値で計算して最後に で割って答えとする.