SRM 381 250pt: TheDiceGame
問題概要
サイコロを振ったら出た目の数だけ飴がもらえる。飴をC(<10^6)個以上もらうのに必要なターン数の期待値を求める問題。
考えたこと
- DP臭。
- まだよく分かっていない。
後から解いたコード
計算量O( 6 * C )。
const int MAX_N = 1000000; double dp_ins[MAX_N + 10]; struct TheDiceGame { double expectedThrows(int candies) { double *dp = dp_ins + 6; for(int cur=1; cur<=candies; cur++){ for(int d=1; d<=6; d++){ dp[cur] += 1.0/6.0 * (1.0 + dp[cur - d]); } } return dp[candies]; } };