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个人依次等概率取一个箱子,如果有礼物则 ...
随机推荐
- linux:date命令(转)
在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便. 1.命令格式: date [参数 ...
- iOS 振动反馈
代码地址如下:http://www.demodashi.com/demo/12461.html 1. 常用场景 继 iPhone7/7P 实体 home 键出现后,home 键再也无法通过真实的物理按 ...
- Windows Thin PC体验 & 语言包更改(win 7 included)
本作品由Man_华创作,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.基于http://www.cnblogs.com/manhua/上的作品创作. 简介: Window ...
- VueJS自定义过滤器:new Vue({filters:{filter1:function(){}....}})
Vue.js 允许你自定义过滤器,被用作一些常见的文本格式化. 语法 <!-- 在两个大括号中 --> {{ message | capitalize }} <!-- 在 v-bin ...
- [ACM] hdu 1029 Ignatius and the Princess IV (动归或hash)
Ignatius and the Princess IV Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32767K (Ja ...
- npm常用命令(转)
npm install <name>安装nodejs的依赖包 例如npm install express 就会默认安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本, ...
- web翻译——插件
很多时候,可能我们web项目中需要的只是机械式的翻译,并不需要什么利用xml或者js json等等实现逼真翻译,那样工作量太大.这时候可能你就需要这几款小工具来帮助你.当然,如果 对翻译或者你的项目外 ...
- erlang中遍历取出某个位置的最大值
例:有这么一个列表,A = [["abc","bds",3],["ssdss","dddx",2],["sfa ...
- 【caffe】Caffe的Python接口-官方教程-01-learning-Lenet-详细说明(含代码)
01-learning-Lenet, 主要讲的是 如何用python写一个Lenet,以及用来对手写体数据进行分类(Mnist).从此教程可以知道如何用python写prototxt,知道如何单步训练 ...
- 目标跟踪之camshift---opencv中meanshift和camshift例子的应用
在这一节中,主要讲目标跟踪的一个重要的算法Camshift,因为它是连续自使用的meanShift,所以这2个函数opencv中都有,且都很重要.为了让大家先达到一个感性认识.这节主要是看懂和运行op ...