设$f(i,j)$为在前i次投篮中命中了j次的概率,那么显然
$$f(i,j)=f(i-1,j)\cdot\frac{i}{q}+f(i-1,j-1)\cdot(1-\frac{i}{q}),$$
等式右侧表示或者前$i-1$次投篮中已经命中了j次且第i次未命中、或者前$i-1$次投篮中命中了$j-1$次且第i次命中。
递推初值为$f(0,0)=1$,对不合法的i,j(比如$j>i$就不合法)一律将$f(i,j)$赋为0。
简单试算可以发现$q=60$时,$f(50,20)$小于百分之二,因此在50和60之间二分查找q即可得结果$52.6494571953$。
注:为方便作除法,以下代码为Python 3。
a,b=50,60
while b-a>=0.0000000001:
q=0.5*(a+b)
f=[[0 for j in range(21)] for i in range(51)]
f[0][0] = 1
for x in range(1,51):
for y in range(min(x,20)+1):
t=x/q
if y>0:
f[x][y]+=f[x-1][y-1]*(1-t)
if y<x:
f[x][y]+=f[x-1][y]*t
if f[-1][-1]>0.02:
a=q
else:
b=q
print("{:.10f}".format(a))
|