問題
http://community.topcoder.com/stat?c=problem_statement&pm=8414&rd=10804
解き方
dpで解く。
前の状態から現在の状態までに行ける全ての場合について和をとっていく。
前の状態から+1回かつサイコロなので1/6を掛けたものになる。
コード
class TheDiceGame {
public: double expectedThrows(int candies) {
memset(dp,0,sizeof(dp));
for(int i=1;i<=candies;i++){
for(int j=1;j<=6;j++){
int prev=max(0,i-j);
dp[i]+=(dp[prev]+1.0)/6.0;
}
}
return dp[candies];
}
};