注意dp[K+W]和s一定要初始化为double数据,否则会丢失精度
double new21Game(int N, int K, int W){
//注意dp[K+W]和s一定要初始化为double数据,否则会丢失精度
double dp[K+W]; //每个下标值对应的获胜概率
double s = 0; //累加概率 f(x)=1/W *s = s/W; s = ( f(x+1) + f(x+2) +...+ f(x+W) )
for(int i = K;i < K+W;i++) {//填蓝色的格子(填的数值为获胜的概率是0或者1)
if(i <= N) dp[i] = 1;
else dp[i] = 0;
s += dp[i];
}
for(int i = K-1;i >= 0;i--) { //填橘色的格子(往左边依次填)
dp[i] = s/W;
s = s-dp[i+W]+dp[i];
}
return dp[0];
}