题解-poj3682King Arthur's Birthday Celebration + 期望嵌套

Problem

poj-3682

题目大意:抛一次硬币有$p$的概率得到正面,当有$n$次正面时停止,抛第$i$次的花费为$2i-1$,求抛的期望次数和期望花费

Solution

本来做这题就是想巩固一下期望方面的东西,可能有点拓展

第一问比较明显,设$f_i$表示抛掷了$i$次时的期望天数,依题意有:

$f_i=p\cdot f_{i-1}+(1-p)\cdot f_i+1$

解释一下,对于抛一次,有$p$的概率正面,只要再抛$f_{i-1}次即可$,所以加上$p\cdot f_{i-1}$,有$1-p$的概率反面,则仍要抛$f_i$次,所以加上$(1-p)\cdot f_i$,再加上这次抛掷的一次,我们就得到了有$i$次正面时天数的期望

上面的式子移项消掉,得到$f_i=f_{i-1}+\frac 1p$,即$f_i=\frac ip$


第二问有点意思,设$E_i$表示抛掷了$i$次正面时的期望花费,仿照上面的式子写出:

$E_i=p\cdot E_{i-1}+(1-p)\cdot E_i+2f_i-1$

式子解释和上面一样,只是抛掷的成本变为了$2f_i-1$

同样化简,$E_i=E_{i-1}+\frac {2i}{p^2}-\frac 1p$,求和可得$E_i=\frac {(1+n)n}{p^2}-\frac np$


至于为什么抛掷花费可以用$2f_i-1$这种利用期望表示的式子,其实是因为$2f_i-1$这个式子为一次函数,我们可以用两种方法证明在外部函数为一次函数的情况下,可以利用期望做自变量得到因变量的期望

同时扩展一下,我们可以证明,仅有一次函数满足这个条件

我们明确一下证明的内容,即若$x_0$为$x$的期望,若$F(x_0)$等于$F(x)$的期望,则$F(x)$一定为一次函数(为了方便表达,设$F^{'}(x)$为$F(x)$的期望)

①证明一次函数可行

由于$x_0=\sum p_iv_i$,我们将其中$p_i$的影响去掉,用一个无穷集合记录,在这个集合中$v_i:v_j$的数量比为$p_i:p_j$,而$x_0$则可以表达为这个集合元素的平均数(实际上就是将加权平均数化为了平均数,更便于理解)

而$x_0$的定义为集合数中的一次方平均数,则在一次函数$F(x)$的影响下,$\frac {\sum F(x)}n=F(\frac {\sum x}n)$

推广一下,若$x_0$为元素的$k$次方期望(加权平均值),则仅有$k$次函数满足上述性质

②证明仅有一次函数可行

由于$x_0=\sum p_iv_i$

则有$F(x_0)=F(\sum p_iv_i),F^{'}(x)=\sum p_iF(v_i)$

如果要求$F(x_0)=F^{'}(x)$,则要求$F(\sum p_iv_i)=\sum p_iF(v_i)$,满足条件下$F(pv)=pF(v)$,则$F(x)$一定为正比例函数,但考虑到求$\sum$时项的数量都是相等的,所以我们可以在正比例函数的基础上加上一个常数,这样在求$\sum$后常数之间可以抵消。由此可证$F(x)$一定要求为一次函数

Code

#include <cstdio>
int main(){
    int n;double p;
    while(1){
        scanf("%d%lf",&n,&p);if(!n)return 0;
        printf("%.3lf %.3lf\n",n/p,1.0*n*(n+1-p)/(p*p));
    }
}

猜你喜欢

转载自www.cnblogs.com/penth/p/9625860.html