0286 得分概率
* * * *
拉格朗日计划
* * * *
得分概率

张三既是数学家,也是篮球运动员,他发现在距离篮框x米处投篮得分的概率恰好是$1-x/q$,其中q是一个大于50的常数。

每次练习时,他都会分别从距离为$x=1,2,\ldots,50$的地方投篮,根据他的记录,这样做能恰好得分20次的精确概率为百分之二。

求q,答案应四舍五入到十位小数。

本题难度:



解答

设$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))