ほぼ静的な計画法

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

AOJ 0232 (Life Game : 人生ゲーム)

【問題】

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

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

【解説】

戻るマス目がないため、縦軸iをマス目、横軸jを現在の所持金とした二次元配列を用意し、テーブルの値をそれぞれの地点にいる確率として更新していく。

まず、各ルーレットの出目がでる確率をpとすると、円周をX(=出目の数)等分したものとなるため、pは、1÷Xとなる。

初期地点,初期所持金である(0,0)の確率を1とし、各ルーレットの出目の数進んだ地点の確率(現地点にいる確率×p)を求めて、進んだ地点の確率に加えていく。進んだ先のマスが「Nマス進む」であった場合は、マスの指示に従って進んだ地点を進んだ地点に加え、所持金の増減がある場合、jに指示の金額を加減した地点の確率を計算すればよい。

最後にiがゴールマスとなる各jに対して、Σ(確率×j)を求めて期待値を算出すればよい。double型であるが、誤差の問題は無視してもACした。

【コード】