zoukankan      html  css  js  c++  java
  • 非确定性有穷状态决策自动机练习题Vol.1 D. 收集邮票

    非确定性有穷状态决策自动机练习题Vol.1 D. 收集邮票

    题目描述

    (n)种不同的邮票,皮皮想收集所有种类的邮票。唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是(n)种邮票中的哪一种是等概率的,概率均为(1/n)。但是由于凡凡也很喜欢邮票,所以皮皮购买第(k)张邮票需要支付(k)元钱。 现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望。

    输入格式

    一行,一个数字(N N leq 10000)

    输出格式

    要付出多少钱. 保留二位小数

    样例

    样例输入

    3

    样例输出

    21.25

    数据范围与提示

    (N leq10000)

    分析

    思路很好,倒着推导

    以下转自这里

    (f[i])表示现在取到(i)张邮票,要取完剩下邮票的期望次数

    显然(f[n]=0)

    现在已经取得(i)张邮票,所以下一次取邮票有(frac{i}{n})​的概率取到已经有的,期望为(frac{i}{n} imes f[i])

    (frac{n-i}{n})​的概率取到没有的,期望为(frac{n-i}{n}*f[i+1])

    这次取邮票的期望为(1),所以总期望为:

    $f[i]=frac{i}{n}f[i]+frac{n-i}{n}f[i+1]+1 $

    化简可得:(f[i]=f[i+1]+frac{n}{n-i})

    (g[i])表示现在取到(i)张邮票,要取完剩下邮票的期望价格 显然(g[n]=0)

    现在已经取得(i)张邮票,所以下一次取邮票有(frac{i}{n})​的概率取到已经有的,期望为(frac{i}{n}*(g[i]+f[i]+1)),

    (frac{n-i}{n})​的概率取到没有的,期望为(frac{n-i}{n}*(g[i+1]+f[i+1]+1))

    所以总期望为:

    $g[i]=frac{i}{n}(g[i]+f[i]+1)+frac{n-i}{n}(g[i+1]+f[i+1]+1) $

    化简可得

    (g[i]=frac{i}{n-i}*f[i]+g[i+1]+f[i+1]+frac{n}{n-i})

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+5;
    inline int read(){
    	int x=0,f=1;
    	char ch=getchar();
    	while(ch<'0' || ch>'9'){
    		if(ch=='-') f=-1;
    		ch=getchar();
    	}
    	while(ch>='0' && ch<='9'){
    		x=(x<<1)+(x<<3)+(ch^48);
    		ch=getchar();
    	}
    	return x*f;
    }
    double f[maxn],g[maxn];
    int n;
    int main(){
    
    	n=read();
    	for(int i=n-1;i>=0;i--){
    		f[i]=f[i+1]+(double)n/(double(n)-(double)i);
    		g[i]=(double)i/((double)n-(double)i)*(f[i]+1)+g[i+1]+f[i+1]+1;
    	}
    	printf("%.2lf
    ",g[0]);
    	return 0;
    }
    
  • 相关阅读:
    hdu--4336--概率dp
    hdu--3905--dp
    codeforces--279--
    hdu--5023--线段树
    正则表达式
    vim编辑器使用
    圆头像控件,自动监听点击跳转到Activity
    ImageView切换两种状态下的模式
    string字符串截取
    Class对象获取方法
  • 原文地址:https://www.cnblogs.com/liuchanglc/p/13519529.html
Copyright © 2011-2022 走看看