题目链接:

http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1010&cid=459

找出公式,公式有实际意义,某种情形当重复做n次实验时会出现一次,即出现的概率为1/n,现在要想出现这种情形,平均要做多少次实验,显然平均要做n次。

说一个具体的,比如掷色子,有6个点,6个点随机等概率出现。掷一次色子出现1的概率为1/6,现在想掷出1来,平均要掷色子多少次,即次数的数学期望是多少。

可以证明:

设掷i次色子才出现1的概率为p[i],则有

p[1] = 1/6;

p[2] = (5/6) *(1/6);第一次没有出现

p[3] = (5/6)^2*(1/6)

`````

p[n] = (5/6)^n-1*(1/6);前n-1次没有出现

``````

所以次数的数学期望为sum(k*p[k]),(k>=1,k为自然数,可以取到无穷)  ,据观察,有p[i] = p[i-1]*(5/6);

式子1:s = 1*p[1] + 2*p[2] + ``` +n*p[n] +````

式子2:(5/6)*s =     1*p[1] + ````(n-1)*p[n]+````(式子2为式子1的左右两边同时乘以5/6得到)

用式子1-式子2得

(1/6)*s = 1/6 + (1/6)*(5/6) + (1/6)*(5/6)^2````+(1/6)*(5/6)^n+```

又等比数列的公式得(1/6)*s =( 1/6(1 -(5/6)^n)/(1-5/6).由于n为正无穷,所有(5/6)^n =0;所以s = 6.

这个题的公式为:

情形1,出现连续n个相同后停止掷色子的次数的期望 = 1+m+m^2 + ``` + m^(n-1);

情形2,出现连续n个不同后停止掷色子的次数的期望 = 1+m/(m-1) + m^2/((m-1)*(m-2))+```+m^(n-1)/((m-1)*(m-2)*```*(m-n+1));

可以这样解释,情形1,先随便掷色子一次,后面要掷出和这个相同的期望数为m,然后仍要掷出相同的期望为m^2```

类推,后面要掷出和这个色子同色的概率为1/m,所以次数的期望为m。第三次掷色子要和前两次相同的概率为1/(m*m),所以期望为m*m```

其余就自己推吧···(未必对···)

另外一种方法:概率dp,摘自杭电解题报告

设dp[i]表示当前在 已经投掷出 i个 不相同/相同 这个状态时期望还需要投掷多少次,然后dp[i] 有如下等式:

相同:

//dp[0] = 1 + dp[1]

//dp[1] = 1 + ((m-1)dp[1] + dp[2]) / m

//dp[i] = 1 + ((m-1)dp[1] + dp[i+1]) / m

//...

//dp[n] = 0;

不相同:

//dp[0] = 1 + dp[1]

//dp[1] = 1 + (dp[1] + (m-1) dp[2]) / m

//dp[2] = 1 + (dp[1] + dp[2] + (m-2) dp[3]) / m

//dp[i] = 1 + (dp[1] + dp[2] + ... dp[i] + (m-i)dp[i+1]) / m

//...

//dp[n] = 0;

。。于是可以高斯消元。。对于第一问。。我们发现就是相当于 Typing Monkey 问题中字符串是 AAAA..AA 这一特殊情况。。解得递推式:

dp[n] = 0

dp[n-1] = dp[n] * m + 1

。。。

解开后等于等比数列求和。

(也可以直接得到这个公式。。。因为在当前状态只有 m/1 的概率可以进入下一状态,否则要重新来过。。而这一步会另总的步数 + 1。)

对于第二问。。

现在设s[i]=sigma{dp[i], 1..i},对s[i] 列方程
每个方程是关于三个相邻的s[i] 的,然后就可以线性时间解出来了。

也可以设 d[i] = dp[i] - dp[i+1].

可以得到 d[i] =  m * d[i-1]  / (m-i)

然后就是解一元一次方程...

参见:

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=13614

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21631

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=24402

http://www.cnblogs.com/ch3656468/archive/2011/05/04/2036332.html

上面的两种递推式肯定能推出上面的公式来,所以我直接用公式写的

贴代码:

 #include <cstdio>
int main()
{
// freopen("in.c","r",stdin);
int t;
while(scanf("%d",&t) != EOF)
{
while(t--)
{
double flag,m,n;
scanf("%lf%lf%lf",&flag,&m,&n);
double ans=,tmp =;
if(flag == )
{
for(int i=; i<n; ++i)
{
tmp *= m;
ans += tmp; }
}
else
{
for(int i=; i<n; ++i)
{
tmp *= (m/(m-i));
ans += tmp;
}
}
printf("%lf\n",ans);
}
}
return ;
}

dice 概率论 概率DP的更多相关文章

  1. hdu 4625 Dice(概率DP)

    Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  2. hdu 4586 Play the Dice(概率dp)

    Problem Description There is a dice with n sides, which are numbered from 1,2,...,n and have the equ ...

  3. HihoCoder - 1339 Dice Possibility(概率dp)

    题意:求用N(1<=N<=100)个骰子掷出M(1<=M<=600)的概率 分析:直接求概率可能出现6^100次方,会爆精度.可以用一个数组dp[i][j]记录用i个骰子掷出j ...

  4. HihoCoder1339 Dice Possibility(概率DP+母函数)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 What is possibility of rolling N dice and the sum of the numb ...

  5. HDU 4652 Dice (概率DP)

    版权声明:欢迎关注我的博客,本文为博主[炒饭君]原创文章,未经博主同意不得转载 https://blog.csdn.net/a1061747415/article/details/36685493 D ...

  6. Dice (III) 概率dp

    #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> ...

  7. Throwing Dice(概率dp)

    C - Throwing Dice Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Lig ...

  8. HDU 4599 Dice (概率DP+数学+快速幂)

    题意:给定三个表达式,问你求出最小的m1,m2,满足G(m1) >= F(n), G(m2) >= G(n). 析:这个题是一个概率DP,但是并没有那么简单,运算过程很麻烦. 先分析F(n ...

  9. SPOJ Favorite Dice(概率dp)

    题意: 一个骰子,n个面,摇到每一个面的概率都一样.问你把每一个面都摇到至少一次需要摇多少次,求摇的期望次数 题解: dp[i]:已经摇到i个面,还需要摇多少次才能摇到n个面的摇骰子的期望次数 因为我 ...

随机推荐

  1. xshell各个版本下载

    官网下载 怎么从官网下载Xshell 5 或者其他版本呢? 下面我们详细步骤说明! 1)首先我们打开netsarang官网, 点击下载Xshell 6 !填写邮箱等信息! http://www.net ...

  2. 20170711xlVBA批量制图一例

    Public Sub GatherDataPicker() Application.ScreenUpdating = False Application.DisplayAlerts = False A ...

  3. 4-6 select_tag和select的区别和理解。javascript_tag

    via: :all是什么意思?主要用于约束http动作. <%= select_tag "set_locale", options_for_select(LANGUAGES, ...

  4. HDU-3729 二分匹配 匈牙利算法

    题目大意:学生给出其成绩区间,但可能出现矛盾情况,找出合理组合使没有说谎的人尽可能多,并按maximum lexicographic规则输出组合. //用学生去和成绩匹配,成绩区间就是学生可以匹配的成 ...

  5. 49 BOM 和DOM

    一.BOM window 对象  1.确认,输入,    window.alert(123) // 弹框    let ret = window.confirm("是否删除") / ...

  6. PHP函数总结 (一)

    <?php /** * 原理: * 函数不调用不执行,定义函数时,会将 * 函数放到内存中代码段,当调用函数时去内存 * 中函数名称所在位置中执行函数体,执行完后 * 将控制权移交回给调用函数的 ...

  7. Razor视图引擎 语法学习

    下面就和大家分享下我在asp.net官网看到的资料,学习到的点语法.1.通过使用@符号,可以直接在html页面中写C#或者VB代码:运行后: 2.页面中的C#或者VB代码都放在大括号中.运行后: 3. ...

  8. pyculiarity 时间序列(异常流量)异常检测初探——感觉还可以,和Facebook的fbprophet本质上一样

    demo: from pyculiarity import detect_ts import matplotlib.pyplot as plt import pandas as pd import m ...

  9. Object是个什么鬼

    引言 老人常说,在js中,一切皆对象,那对象又是什么涅,最常用的我们都知道,对象有方法和属性.由一些键值对构成的集合,然后随便用个大括号括起来就形成了一个对象.看起来蛮简单的,但是真是这么简单么,当我 ...

  10. 蓝桥杯—ALGO-18 单词接龙(DFS)

    问题描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母, 要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次) ,在两个单词相连时,其 ...