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));
}
}

题解-poj3682King Arthur's Birthday Celebration的更多相关文章

  1. POJ3682King Arthur's Birthday Celebration(数学期望||概率DP)

    King Arthur is an narcissist who intends to spare no coins to celebrate his coming K-th birthday. Th ...

  2. poj-3682 King Arthur's Birthday Celebration

    C - King Arthur's Birthday Celebration POJ - 3682 King Arthur is an narcissist who intends to spare ...

  3. POJ3682 King Arthur's Birthday Celebration

    King Arthur is an narcissist who intends to spare no coins to celebrate his coming K-th birthday. Th ...

  4. 【概率论】【POJ 3682】【King Arthur's Birthday Celebration】

    题意:进行翻硬币实验,若k次向上则结束,进行第n次实验需花费2*n-1的费用,询问期望结束次数及期望结束费用 设F[i]为第i次结束时的概率 F[i]=  c(i-1,k-1)*p^k*(1-p)^( ...

  5. King Arthur's Birthday Celebration

    每天抛一个硬币,硬币正面朝上的几率是p,直到抛出k次正面为止结束,第一天抛硬币需花费1,第二天花费3,然后是5,7,9……以此类推,让我们求出抛硬币的天数的期望和花费的期望. 天数期望: A.投出了k ...

  6. POJ3682;King Arthur's Birthday Celebration(期望)

    传送门 题意 进行翻硬币实验,若k次向上则结束,进行第n次实验需花费2*n-1的费用,询问期望结束次数及期望结束费用 分析 我们令f[i]为结束概率 \[f[i]=C_{i-1}^{k-1}*p^k* ...

  7. [POJ3682]King Arthur's Birthday Celebration[期望DP]

    也许更好的阅读体验 \(\mathcal{Description}\) 每天抛一个硬币,硬币正面朝上的几率是p,直到抛出k次正面为止结束,第\(i\)天抛硬币的花费为\(2i-1\),求出抛硬币的天数 ...

  8. 题解 [CF525D] Arthur and Walls

    题面 解析 首先考虑将一个\('*'\)变成\('.'\)后会形成什么, 显然至少是一个\(2\times 2\)的矩形. 因为\(1\times 1\)和\(1\times 2\)的改了没用啊, 而 ...

  9. poj 3682 King Arthur's Birthday Celebration (期望dp)

    传送门 解题思路 第一问比较简单,设$f[i]​$表示扔了$i​$次正面向上的硬币的期望,那么有转移方程 : $f[i]=f[i]*(1-p)+f[i-1]*p+1​$,意思就是$i​$次正面向上可以 ...

随机推荐

  1. 设计模式---行为变化模式之命令模式(Command)

    前提:行为变化模式 在组件的构建过程中,组建行为的变化经常导致组件本身剧烈的变化.“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件的变化,实现两者之间的松耦合. 类中非虚函数和静态函数方法 ...

  2. mssql 数据库表行转列,列转行 比较经典

    --行列互转 /******************************************************************************************** ...

  3. ajax传递对象数组

    1.Json.stringify()是将json数据格式转换成String类型字符串的方法. 后台可以使用String类型接受,接收完可以使用json转换java集合的方法. List<实体类& ...

  4. tomcat源码研究之源码导入eclipse

    版本:8.5.x官网:https://tomcat.apache.org/svn.html1. 下载源码,git镜像:https://github.com/apache/tomcat85 .2. 导入 ...

  5. Android MediaPlayer播放raw资源封装类

    import android.content.Context; import android.media.MediaPlayer; import xxxx.R; public class MediaU ...

  6. 二十九、Linux 进程与信号——minishell(2)

    编程内容: 1.完成  echo env export 命令 2.完成前后台进程 3.完成重定向 完整代码如下: 29.1 主函数.通用头文件和Makefile 29.1.1 主函数 mshell_m ...

  7. Matconvnet环境配置一些坑

    1.先安装VS再安装matlab否则安装失败 2.cuda7.5支持MATLABR2016a/b,支持VS2013但是不支持VS2015 3.cuda8.0支持MABTLABR2017a,对应编译需V ...

  8. SQL Server 远程备份详解

    例1: 有A数据库服务器,B本机: 我现在想通过在B机器上通过代码调用SQL来执行A数据库的备份到B机器上 调用的SQL语句为:Backup Database MYDATABASE To Disk=' ...

  9. oracle 任务备份

    @echo offset hour=%time:~,2%if "%time:~,1%"==" " set hour=0%time:~1,1%set temp=% ...

  10. pyqt5-顶层窗口特定操作-图标和标题和不透明度

    图标: setWindowIcon(QIcon("resource/header_icon.png"))     设置窗口图标 icon=QIcon(r'大象.png')      ...