SGU 495 Kids and Prizes:期望dp / 概率dp / 推公式
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=495
题意:
有n个礼物盒,m个人。
最开始每个礼物盒中都有一个礼物。
m个人依次随机选一个盒子,如果有礼物就拿走,然后放回空盒子。
问你所有人得到总礼物数的期望。
题解:
三种做法:期望dp,概率dp,推公式
一、期望dp
表示状态:
dp[i] = 该第i个人拿箱子时的总礼物的期望
找出答案:
ans = dp[m]
如何转移:
对于第i个人,拿到礼物或没拿到。
(1)φ(没拿到) = dp[i] P(没拿到) = dp[i]/n
(2)φ(拿到) = dp[i]+1 P(拿到) = (n-dp[i])/n
综上:dp[i+1] = dp[i] * dp[i]/n + (dp[i]+1) * (n-dp[i])/n
边界条件:
dp[0] = 0
还没开始拿的时候礼物数为0
二、概率dp
表示状态:
dp[i] = 第i个人拿到礼物的概率
找出答案:
ans = ∑ dp[i]
每个人得到礼物的概率 * 得到礼物的数量(为1) 之和。
如何转移:
对于第i个人,拿到礼物或没拿到。
(1)没拿到:dp[i+1]依然等于dp[i],没拿到礼物的概率为1-dp[i].
(2)拿到:dp[i+1] = dp[i] - 1/n,拿到的概率为dp[i].
综上:dp[i+1] = dp[i] * (1 - dp[i]) + (dp[i] - 1/n) * dp[i]
边界条件:
dp[0] = 1
所有盒子里都有礼物,第0个人一定拿到礼物。
三、推公式
m个人是独立的。
对于每个礼物不被人选中的概率为((n-1)/n)^m
那么不被选中的礼物数的期望就是 n*((n-1)/n)^m
所以答案就是 n-n*((n-1)/n)^m
AC Code(expectation):
// state expression:
// dp[i] = expectation
// i: considering ith person
//
// find the answer:
// ans = dp[m]
//
// transferring:
// dp[i+1] = dp[i] * dp[i]/n + (dp[i]+1) * (n-dp[i])/n
//
// boundary:
// dp[0] = 0
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_M 100005 using namespace std; int n,m;
double dp[MAX_M]; int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<m;i++)
{
dp[i+]=dp[i]*dp[i]/n+(dp[i]+1.0)*(n-dp[i])/n;
}
printf("%.10f\n",dp[m]);
}
AC Code(probability):
// state expression:
// dp[i] = probability
// i: ith person got a gift
//
// find the answer:
// sigma dp[i]
//
// transferring:
// dp[i+1] = dp[i] * (1 - dp[i]) + (dp[i] - 1/n) * dp[i]
//
// boundary:
// dp[0] = 1
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_M 100005 using namespace std; int n,m;
double ans=;
double dp[MAX_M]; int main()
{
scanf("%d%d",&n,&m);
dp[]=;
for(int i=;i<m;i++)
{
dp[i+]=dp[i]*(1.0-dp[i])+(dp[i]-1.0/n)*dp[i];
ans+=dp[i];
}
printf("%.10f\n",ans);
}
AC Code(公式):
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h> using namespace std; int n,m; int main()
{
scanf("%d%d",&n,&m);
printf("%.10f\n",n-n*pow((n-1.0)/n,m));
}
SGU 495 Kids and Prizes:期望dp / 概率dp / 推公式的更多相关文章
- sgu 495. Kids and Prizes (简单概率dp 正推求期望)
题目链接 495. Kids and Prizes Time limit per test: 0.25 second(s)Memory limit: 262144 kilobytes input: s ...
- SGU 495. Kids and Prizes( 数学期望 )
题意: N个礼品箱, 每个礼品箱内的礼品只有第一个抽到的人能拿到. M个小孩每个人依次随机抽取一个, 求送出礼品数量的期望值. 1 ≤ N, M ≤ 100, 000 挺水的说..设f(x)表示前x ...
- SGU 495. Kids and Prizes
水概率....SGU里难得的水题.... 495. Kids and Prizes Time limit per test: 0.5 second(s)Memory limit: 262144 kil ...
- 495. Kids and Prizes
http://acm.sgu.ru/problem.php?contest=0&problem=495 学习:当一条路走不通,换一种对象考虑,还有考虑对立面. 495. Kids and Pr ...
- 【整理】简单的数学期望和概率DP
数学期望 P=Σ每一种状态*对应的概率. 因为不可能枚举完所有的状态,有时也不可能枚举完,比如抛硬币,有可能一直是正面,etc.在没有接触数学期望时看到数学期望的题可能会觉得很阔怕(因为我高中就是这么 ...
- POJ2096Collecting Bugs(数学期望,概率DP)
问题: Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material ...
- 期望与概率dp
概率与期望dp 定义: 概率:事件A发生的可能性,计作P(A) 期望:事件A结果的平均大小,记住E(x) E(x)=每种结果的大小与其概率的乘积的和 注意计算概率时需要考虑是否要用容斥原理 期望d ...
- 动态规划之经典数学期望和概率DP
起因:在一场训练赛上.有这么一题没做出来. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6829 题目大意:有三个人,他们分别有\(X,Y,Z\)块钱 ...
- 【SGU】495. Kids and Prizes
http://acm.sgu.ru/problem.php?contest=0&problem=495 题意:N个箱子M个人,初始N个箱子都有一个礼物,M个人依次等概率取一个箱子,如果有礼物则 ...
随机推荐
- vue 监听 watch 使用
1.api https://cn.vuejs.org/v2/api/#watch 有2个配置: (1)深度 watcher deep: true(2)该回调将会在侦听开始之后被立即调用 immedia ...
- 【Python】继承
子类的方法__init__() 创建子类的实例时,Python首先需要完成的任务是给父类所有属性赋值,为此,子类的方法__init__()需要父类施以援手. class Car(): '''模拟汽车' ...
- TimeSpan时间间隔
一个TimeSpan对象都表示一个时间间隔 (持续时间的时间或时间),单位为正数或负数的天数. 小时. 分钟. 秒和小数部分的第二个数字.TimeSpan结构还可以用于表示一天时间,但仅,如果与某一特 ...
- C语言重要概念汇总
作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...
- 多域名THINKPHP利用MEMCACHE方式共享SESSION数据(转)
一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录使 ...
- typedef struct与struct定义结构体
今天在定义结构体的时候发现typedef struct与struct定义结构体有一些不同之处: 结构也是一种数据类型, 能够使用结构变量, 因此, 象其他 类型的变量一样, 在使用结构变量时要先对其 ...
- Android应用的电量消耗和优化的策略
对于Android移动应用的开发者来说,耗电量的控制一直是个老大难问题. 我们想要控制耗电量,必须要有工具或者方法比较准确的定位应用的耗电情况.下面,我们先来分析下如何计算android应 ...
- JavaScript框架——jquery
1.jQuery编程常识 ————————如何进行jQuery插件开发 2.五星评分——jQuery Raty 一个很棒的jQuery评分插件—jQuery Raty 3.能感 ...
- 疑问:使用find_elements_by_ios_predicate定位元素组,获取元素的index没有按照顺序
通过ios Appium Inspect查看到的元素信息如下: eList=self.driver.find_elements_by_ios_predicate('type == “XCUIEleme ...
- 再看GS线程
再看GS线程 void GameServer::ProcessThreadTry() { ; packet rcvPkt; rcvPkt.data = * ]; //该事件工厂主要创建了两个定时器1. ...