题解-poj3682King Arthur's Birthday Celebration

Problem

poj-3682

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

Solution

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

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

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

解释一下,对于抛一次,有(p)的概率正面,只要再抛(f_{i-1})次即可,所以加上(pcdot 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=pcdot 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/p,1.0*n*(n+1-p)/(p*p));
	}
}
原文地址:https://www.cnblogs.com/penth/p/9625860.html