令$g(i,j,k)$为用i个j面骰掷出k点概率,则有
$$g(i,j,k)=\frac{1}{m}\sum_{\ell=k-j}^{k-1} g(i-1,j,\ell)$$
从而若$f(i,j)$表示第i轮后掷出j点的概率,则有
$$f(i,j)=\sum_{k=1}^jf(i-1,k)g(k,d_i,j),$$
其中$d_i$表示第i轮所使用的骰的面数,递推计算即得结果$2406376.3623$。
注:为便于格式化输出,以下代码为Python 3
d=[4,6,8,12,20]
m=1
fp=[0.0,1.0]
for x in d:
gp=[1.0]
fn=[0.0]*(m*x+1)
for i in range(1, m + 1):
gn=[0.0]*(x*i+2)
for j in range(x*(i-1)+1):
gn[j+1]+=gp[j]/x
gn[j+x+1]-=gp[j]/x
for j in range(1,x*i+1):
gn[j]+=gn[j-1]
gp=gn
for j in range(1, x*i+1):
fn[j]+=fp[i]*gp[j]
fp=fn
m*=x
print(f"{sum(fp[i]*i*i for i in range(1,m+1))-sum(fp[i]*i for i in range(1,m+1))**2:.4f}")
|