ほぼ静的な計画法

競技プログラミングで解いた問題の解法とコードを晒していくページ。ややマイナーなC♯。

AOJ 0229 (Big Hit ! : 大当たり!)

【問題】

https://onlinejudge.u-aizu.ac.jp/problems/0229

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0229

【解説】

問題文中に記載されている通りに計算すれば問題ない。計算は少々複雑なので、ゲーム全体を通しての支出と収入に分けて考える。

まずは支出であるが、以下の条件となる。

  • 通常ゲームは1ゲーム3メダル
  • ボーナスゲーム中は1ゲーム2メダル
  • スターがそろった場合は次ゲームが無料(=スターが揃ったゲーム自体が無料と考えて差し支えない)

そのため、総ゲーム数ー(スターが揃ったゲーム数+ボーナスゲーム数)が3メダルを消費したゲーム数、ボーナスゲーム数が2メダルを消費したゲーム数となり、その合計が支払ったメダル数である。

次に収入であるが、以下の条件となる。

  • 7もしくはBARが揃った場合は15メダル
  • ボーナスゲーム中は常に15メダル
  • ブドウは7メダル、チェリーは2メダル

そのため、ビックボーナスの回数×5・レギュラーボーナスの回数×3・ビッグボーナスの回数・レギュラーボーナスの回数が15メダルを得た回数、それにブドウが揃った回数×7メダルとチェリーが揃った回数×2メダルを加えたものが得たメダル数である。

最後に初期の手持ちのメダルから足し引きすれば、最終的な所持メダル数となる。

【コード】