zoukankan      html  css  js  c++  java
  • SP1026 FAVDICE Favorite Dice

    SP1026 FAVDICE - Favorite Dice

    题意:

    有个 \(n\)​ 面的骰子,要求每一面都掷到,期望掷多少次。

    题解:

    赠券收集问题。

    假设手上已经有了 \(i - 1\)​​​ 个面,从集合中选取一个新的面的概率为 \(\frac{n - i + 1}n\)​ ,那么期望就是 $\frac n {n - i + 1} $。

    总期望为 \(\sum_{i = 1} ^n \frac n {n - i + 1} = \sum _{i = 1} ^ n \frac n i\)

    为什么会是倒数呢?有一个硬币,有 \(\frac 12\) 的概率取到正面, 那么取到正面的期望次数就是 \(2\)​。(迷惑)​​

    也可以用dp 来推。

    我们设 \(f_i\) 表示已经取了 i 种数到达取 \(n\) 种数的次数的期望。

    显然有 \(f_i = 0\)​ ,所以需要逆推。

    选择 \(i\) 种数之后, 再选一个数,与之前相同的概率 \(\frac i n\), 不同的概率为 \(\frac{n - i} n\)​, 本次取到数的期望W为 1,

    所以, \(f_i = \frac {n - i} n f_{i + 1} + \frac i n f_i + 1\)​。

    化简可以得到, \(f_i = f_{i + 1} + \frac n{n - i}\)

    有几个疑惑:

    1. \(\frac {n - i} n\)​​ 表示的是概率, \(f_{i + 1}\)​​​ 表示的是期望,为什么概率可以和期望去相乘?

      因为\(f_i\) 表示的是已经取了 i 种数到达取 \(n\)​ 种数的次数的期望, 所以在这里它就相当于权值。

    2. 最后为啥要加 1 ?

      仍然是从 \(f_i\) 的定义上去理解,因为\(f_i\) 表示已经取了 i 种数到达取 \(n\) 种数的次数的期望。

      不论它取到了新的,还是没有取到新的,它这一次是一定要取的,所以取的次数加 1。

    感性理解一下吧!

    感谢 https://www.luogu.com.cn/blog/pufanyi/solution-sp1026

    /*
    Date:2021.9.6
    Source:SP1026
    konwledge:期望dp 
    */
    #include <iostream>
    #include <cstdio>
    #define orz cout << "AK IOI" << "\n"
    
    using namespace std;
    const int maxn = 1010;
    
    inline int read()
    {
    	int f = 0, x = 0; char ch = getchar();
    	while(!isdigit(ch)) f |= (ch == '-'), ch = getchar();
    	while(isdigit(ch)) x = x * 10 + (ch ^ 48), ch = getchar();
    	return f ? -x : x;
    }
    inline void print(int X)
    {
    	if(X < 0) X = ~(X - 1), putchar('-');
    	if(X > 9) print(X / 10);
    	putchar(X % 10 + '0');
    }
    int T, n;
    double f[maxn]; 
    int main()
    {
    	//freopen(".in","r",stdin);
        //freopen(".out","w",stdout);
    	T = read();
    	while(T--)
    	{
    		n = read();
    		f[n] = 0;
    		for(int i = n - 1; i >= 0; i--) 
    			f[i] = f[i + 1] + n / (double)(n - i);
    		printf("%.2lf\n", f[0]);
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    CodeIgniter(3.1.4)框架中成功/错误跳转
    CodeIgniter(3.1.4)框架-url重写,去除index.php
    CodeIgniter(3.1.4)框架中-使用多个公共控制器
    CodeIgniter(3.1.4)框架使用静态文件(js,css)
    PHP无限极分类
    PHP无限极分类
    spring中定时任务quartz2.2.3
    eclipse中git更新操作
    java中日期的换算处理
    使用spring-rabbit测试RabbitMQ消息确认(发送确认,接收确认)
  • 原文地址:https://www.cnblogs.com/yangchengcheng/p/15236225.html
Copyright © 2011-2022 走看看