SGU 495 Kids and Prizes 概率dp

题意:

有N个箱子放有礼物,M个人依次取。如果取到的箱子有礼物,则拿走礼物。无论有没有拿到礼物,都将箱子原状放回。(所以就有可能后面的人拿到前面的人拿过的箱子,然后就没得到奖品)。问,最后能拿走的礼物数量的期望。

两种思路,给跪了,,,还是没有想出来。。。。

m个人是独立的。
对于每个礼物不被人选中的概率为((n-1)/n)^m
那么不被选中的礼物数的期望就是 n*((n-1)/n)^m
所以答案就是  n-n*((n-1)/n)^m;

这个地方自己老想着求1/n,结果没转过来。。。orz

概率dp

那么这道题目就是:设dp[i] 表示i个人拿过以后,主办方送出礼物的期望数量。

那么,对于第i个人,可能拿到,也可能没拿到礼物,转移方程就是:

dp[i] = (N-dp[i-1])/N  *  (dp[i-1] + 1)  +      (dp[i-1])/N   *   dp[i-1];

拿到的概率   拿到的话就要多送一个  没拿到的概率  没拿到那还是一样

Description

ICPC (International Cardboard Producing Company) is in the business of producing cardboard boxes. Recently the company organized a contest for kids for the best design of a cardboard box and selected M winners. There are N prizes for the winners,
each one carefully packed in a cardboard box (made by the ICPC, of course). The awarding process will be as follows:

  • All the boxes with prizes will be stored in a separate room.
  • The winners will enter the room, one at a time.
  • Each winner selects one of the boxes.
  • The selected box is opened by a representative of the organizing committee.
  • If the box contains a prize, the winner takes it.
  • If the box is empty (because the same box has already been selected by one or more previous winners), the winner will instead get a certificate printed on a sheet of excellent cardboard (made by ICPC, of course).
  • Whether there is a prize or not, the box is re-sealed and returned to the room.

The management of the company would like to know how many prizes will be given by the above process. It is assumed that each winner picks a box at random and that all boxes are equally likely to be picked. Compute the mathematical expectation of the number
of prizes given (the certificates are not counted as prizes, of course).

Input

The first and only line of the input file contains the values of N and M ( ).

Output

The first and only line of the output file should contain a single real number: the expected number of prizes given out. The answer is accepted as correct if either the absolute or the relative error is less than or equal to 10 -9.

Sample Input

sample input
sample output
5 7
3.951424
sample input
sample output
4 3
2.3125
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
int main()
{
    int n,m;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        printf("%.9lf\n",n-n*1.0*pow(((1.0*n-1)/(n*1.0)),m));
    }
    return 0;
}

概率dp

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<cstring>
using namespace std;
int main()
{
    int n,m;
    double dp[100005];
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        memset(dp,0,sizeof(dp));
        dp[0]=0;
        dp[1]=1;
        for(int i=2;i<=m;i++)
            dp[i]=dp[i-1]*(1-dp[i-1])+dp[i-1]*(dp[i-1]-1.0/n);
        double s=0;
        for(int i=1;i<=m;i++)
            s+=dp[i];
            printf("%.9lf\n",s);
    }
    return 0;
}

真心氺题。。。。。。不说了都是泪

时间: 2024-10-13 08:14:20

SGU 495 Kids and Prizes 概率dp的相关文章

SGU 495 Kids and Prizes 概率DP 或 数学推理

题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=495 有n个箱子 m个人 有两个思考的角度 1.从箱子的角度 对于一个箱子来说 不被选中的概率是((n-1)/n)^m 所以被选中的概率是(1 - ((n-1)/n)^m) 箱子之间是互相独立的 所以总期望是:n * (1 - ((n-1)/n)^m) [我是算样例然后无意中发现的规律 再证明] 2.从人的角度 从题目中看 人是one by one进去选的 所以可以看作有先后顺序 考虑动态

sgu 495 Kids and Prizes

计算出每个人得到礼物的概率,然后加起来即可 1 #include<iostream> 2 #include<string.h> 3 #include<algorithm> 4 #include<stdio.h> 5 using namespace std; 6 double dp[101010]; 7 int main(){ 8 int n,m; 9 while(cin>>n>>m){ 10 dp[1]=1; 11 for(int i

SGU 495. Kids and Prizes( 数学期望 )

题意: N个礼品箱, 每个礼品箱内的礼品只有第一个抽到的人能拿到. M个小孩每个人依次随机抽取一个,  求送出礼品数量的期望值. 1 ≤ N, M ≤ 100, 000 挺水的说..设f(x)表示前x个人都选择完成后礼品剩下数的期望值( f(0) = N ), 那么f(x) = f(x - 1) - f(x - 1) / N = f(x - 1) * (N - 1) / N (显然). 那么答案就是等于 N - N * [(N - 1) / N]^M. 后面部分可以用快速幂优化.时间复杂度O(l

SGU495 Kids and Prizes 概率DP,期望公式

题目 这题目首先进去以后,没地方提交,第一次做SGU的题目,只能在HUSTOJ上提交了 有n个盒子,里面有礼物的,m个人,每个人拿,拿过以后 把礼物取出来 把盒子放回去,求选中礼物数的期望 其实一开始就假设方程 dp[i]为 第i个人获得礼物的概率,但是状态转移方程不知道该怎么办,想了很久都没有办法, 其实首先边界为dp[1] = 1 第一个上来选的人肯定必中 接下来一个人的 则由两部分组成,dp[i] = (1 - dp[i - 1]) * dp[i - 1] + .........,因为上一

SGU 495. Kids and Prizes 期望

n个盒子 m个人轮流选 拿走盒子里的奖品 盒子再放回去 求得到奖品的期望 可以求没有被选到的奖品的期望 用n减去就是答案 #include <stdio.h> #include <iostream> #include <algorithm> #include <math.h> using namespace std; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF)

概率DP入门题

一 概率问题的论文 1.算法合集之<信息学竞赛中概率问题求解初探> 2.有关概率和期望问题的研究 3.算法合集之<浅析竞赛中一类数学期望问题的解决方法> 二 入门题目 1.POJ 3744 Scout YYF I (简单题) 题意:一条路上有n个地雷 ,a[i]代表第i个地雷放的位置,求安全走过这段路的概率 分析:若第k个位置有地雷则安全走过这个位置的方案为在第k-1个位置跳两步概率为(1-p) 从反面考虑 已经安全走过了第i-1个雷 则在第i个雷的死掉的概率为 1-p(从走到a[

概率dp sgu495

Kids and Prizes Time Limit:250MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice SGU 495 Appoint description:  System Crawler  (2014-10-25) Description ICPC (International Cardboard Producing Company) is in the busi

2014 summer day 6 概率dp

全期望公式: 全概率公式: POJ 2096 [题意]: 一个软件有s个子系统,会产生n种bug.某人一天发现一个bug,这个bug属于某种bug,发生在某个子系统中.求找到所有的n种bug,且每个子系统都找到bug,这样所要的天数的期望.[分析]:需要注意的是:bug的数量是无穷大的,所以发现一个bug,出现在某个子系统的概率是1/s,属于某种类型的概率是1/n. 那么dp[i][j]表示还要找到i个系统,还要找到j种病毒的概率. 具体dp方程看代码.但怎么来说这个dp方程的正确性都怪怪的.

Codeforces 28C [概率DP]

/* 大连热身D题 题意: 有n个人,m个浴室每个浴室有ai个喷头,每个人等概率得选择一个浴室. 每个浴室的人都在喷头前边排队,而且每个浴室内保证大家都尽可能均匀得在喷头后边排队. 求所有浴室中最长队伍的期望. 思路: 概率dp dp[i][j][k]代表前i个浴室有j个人最长队伍是k的概率. 枚举第i个浴室的人数.然后转移的时候其实是一个二项分布. */ #include<bits/stdc++.h> using namespace std; int jilu[55]; double dp[