zoukankan      html  css  js  c++  java
  • (概率与期望)洛谷P4550 收集邮票

    洛谷紫题。。恩mmm。。不慌不慌

    题面:

      等概率抽取n种邮票(一种可以取多张),

      取第k花费k元,

      求取到n种邮票的期望花费。  n<=10000

    由于期望花费看起来就和期望次数有关系,那么我们需要

      ===> 求取到n种邮票的期望次数。

    设两个数组,f[ ],g[ ]。

    f[i]表示已取i种,直到取到n种的期望次数

    g[i]表示已取i种,直到取到n种的期望花费

    显然f [n] = g [n] =0。

               so,f [i] = i/n * f [i] + (n-i) * f[n+1] +1

               整理得:f [i] = f[i+1] + n/(n-i)

    解释:① 有i/n的概率取到已买过的种类,而该情况达到目标的收益为f [i]

               ② 有(n-1)/n的概率取到未买过的种类,而该情况达到目标的收益为f [i] 

               ③ 再加上这次自身需要的一次次数

    而我们最终答案是g [0]。//从0的状态取到n的花费

               看题解得 ,g [i] = i/n * (g [i] + f [i] +1) + (n-i) /n* (g [i+1] + f [i+1] + 1)

               整理得:g [i] = i/(n−i)​ ∗ f [i] + g [i+1] + f [i+1] + n/(n−i)

    解释:① 有i/n的概率取到已买过的种类,该情况下,到达的结果是还要花费g[i],并且由于此次的失误,导致之后期望还要买的                  f[i]次价格都上涨了1,总体加了f[i],再加上这次的花费1。后半个式子同理。

               ②上条 supper 抽象啊。那我们考虑为什么这次的花费看作是“1”。因为之后还会加上在他之后上涨的花费,即解释①中f[i]加上的。

       ③而我们推算f[i]时收益为什么是单纯的f[i]或f[i+1]呢?因为此次的决策并不影响其他f[]到达目标的次数。而g[ ]的花费是会随决策增加的。

     鱼头所示 ↓ 。横坐标表示时间(意会一下?),纵坐标表示买单张邮票的花费。

        此次的失误使得价格k总体升高1(升高为红色线),所以要加上f [i],绿点则表示后面加上的“1”。

    (弄懂后)思路海星,代码简单:

    #include <bits/stdc++.h>
    using namespace std;
    double g[10004],f[10004];
    int n; 
    int main()
    {
        cin >> n;
        f[n] = g[n] = 0;
        for (int i=n-1;i>=0;i--)
        {
            f[i] = f[i+1] + 1.0*n/(n-i);
            g[i] = g[i+1] + f[i+1] + 1.0*i/(n-i)*f[i] + 1.0*n/(n-i);
        }
        printf("%.2lf
    ",g[0]);
        return 0;
    }
  • 相关阅读:
    使用 C# 2008 Express Edition 编写的猜数字游戏
    话说三层
    在asp.net 1.1 中使用Ajax
    vs2005 调试时出现“无法附加。绑定句柄无效”的解决办法
    解决“你可能没有权限使用网络资源”的问题
    html&js 在firefox与IE中呈现存在差异的解决方法总结
    sql 事务 全攻略
    mssql的TSQL教程(从建登陆到建库、表和约束)(1)
    数据库练习题
    用批处理附加数据库
  • 原文地址:https://www.cnblogs.com/lyflalala/p/10446996.html
Copyright © 2011-2022 走看看