BZOJ 1426--收集邮票(概率与期望&DP)

1426: 收集邮票

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 504  Solved: 417
[Submit][Status][Discuss]

Description

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

Input

一行,一个数字N N<=10000

Output

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

Sample Input

3

Sample Output

21.25

题目链接:

    http://www.lydsy.com/JudgeOnline/problem.php?id=1426

Solution

    设 f [ i ] 为已经买到了 i  种,期望再买张数。

    设 g [ i ] [ j ] 为已经买到了 i 种,下一张为 j 元,期望还需要花多少钱。。

    于是就有 f [ i ] = ( i / n) * f[ i ] + (1 - i / n) * f [ i + 1 ] + 1

    相对的也有 g [ i ] [ j ] = ( i / n ) * g [ i ] [ j + 1 ] + ( 1 - i / n ) * g [ i + 1 ] [ j + 1 ] + j

    还有 g [ i ] [ j + 1 ] = g [ i ] [ j ] + f [ i ]

    之后解方程求出状态转移方程即可。。。。

    然后发现 j 这一维是可以略去的,于是时间复杂度为O(n)

代码

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#define N 10010
using namespace std;
double n;
double f[N],g[N];
int main(){
    scanf("%lf",&n);
    for(int i=n-1;i>=0;i--){
        f[i]=f[i+1]+n/(n-i);
        g[i]=n/(n-i)+f[i]*i/(n-i)+g[i+1]+f[i+1];
    }
    printf("%0.2lf",g[0]);
    return 0;
}

  

  

This passage is made by Iscream-2001.

时间: 2024-12-28 20:26:25

BZOJ 1426--收集邮票(概率与期望&DP)的相关文章

【BZOJ-1426】收集邮票 概率与期望DP

1426: 收集邮票 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 261  Solved: 209[Submit][Status][Discuss] Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所以皮皮购买第k张邮票需要支付k元钱. 现在皮皮手中没有邮票,皮皮想知道自己得到所有种类

BZOJ 1426 收集邮票 ——概率DP

$f(i)$表示现在有$i$张,买到$n$张的期望 所以$f(i)=f(i+1)+\frac {n}{n-i}$ 费用提前计算,每张邮票看做一元,然后使后面每一张加1元 $g(i)$表示当前为$i$张期望到$n$张时花掉的钱. 那么$g(i)=g(i+1)+f(i+1)+\frac{i}{n-i}f(i)+\frac{n}{n-i}$ 递推即可 #include <cstdio> #include <cstring> #include <iostream> #inclu

bzoj 1426: 收集邮票【期望dp】

我太菜了,看的hzwer的blog才懂 大概是设f[i]表示已经拥有了i张邮票后期望还要买的邮票数,这个转移比较简单是f[i]=f[i](i/n)+f[i+1]((n-i)/n)+1 然后设g[i]为还需要的钱,可以把转移看做每张票都比前面的贵1元,就是g[i]=((n-i)/n)(g[i+1]+f[i+1])+(i/n)(g[i]+f[i])+1 #include<iostream> #include<cstdio> using namespace std; const int

bzoj 1426:收集邮票 求平方的期望

显然如果收集了k天,ans=k*(k+1)/2=(k^2+k)/2.那么现在要求的就是这个东西的期望. 设f[i]表示已有i张邮票,收集到n张的期望次数,g[i]表示已有i张邮票,收集到n张的次数的平方的期望. 显然i这个点有 $\frac{i}{n}$ 的概率走自环,有 $\frac{n-i}{n}$ 的概率走到i+1这个点. SO $$f[i]=(\frac{i}{n})\times(f[i]+1)+(\frac{n-i}{n})\times(f[i+1]+1)$$ 以前一直不懂平方的期望是

1426: 收集邮票

1426: 收集邮票 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 334  Solved: 269[Submit][Status][Discuss] Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所以皮皮购买第k张邮票需要支付k元钱. 现在皮皮手中没有邮票,皮皮想知道自己得到所有种类

【BZOJ-4008】亚瑟王 概率与期望 + DP

4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 832  Solved: 515[Submit][Status][Discuss] Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的.作为一个

概率和期望DP

概率和期望DP(整理) 概率DP顺着推,期望DP逆着递推求解 概率,又称或然率.机会率.机率(几率)或可能性,是概率论的基本概念.概率是对随机事件发生的可能性的度量,一般以一个在0到1之间的实数表示一个事件发生的可能性大小.越接近1,该事件更可能发生:越接近0,则该事件更不可能发生.人们常说某人有百分之多少的把握能通过这次考试,某件事发生的可能性是多少,这都是概率的实例. 期望就是加权平均. 1.期望值是指人们对所实现的目标主观上的一种估计: 2.期望值是指人们对自己的行为和努力能否导致所企求之

概率与期望dp相关

概率与期望dp 概率 某个事件A发生的可能性的大小,称之为事件A的概率,记作P(A). 假设某事的所有可能结果有n种,每种结果都是等概率,事件A涵盖其中的m种,那么P(A)=m/n. 例如投掷一枚骰子,点数小于3的概率为2/6=1/3. 如果两个事件A和B所涵盖的结果没有交集,那么P(A或B发生)=P(A)+P(B) 还是掷骰子 P(点数小于3或点数大于4)=2/6+2/6=2/3 如果A和B所涵盖的结果有交集 那么P(A或B发生)=P(A)+P(B)-P(A与B同时发生) P(点数小于3或点数

【BZOJ】1426: 收集邮票 期望DP

[题意]有n种不同的邮票,第i次可以花i元等概率购买到一种邮票,求集齐n种邮票的期望代价.n<=10^4. [算法]期望DP [题解]首先设g[i]表示已拥有i张邮票集齐的期望购买次数,根据全期望公式,可以依赖于买到已集和未集邮票的情况: $$g[i]=\frac{i}{n}*g[i]+\frac{n-i}{n}*g[i+1]+1$$ 当然最后记得+1,然后移项解方程. 设f[i]表示已拥有i张邮票及其的期望代价,会发现因为是倒推,所以代价的问题变得很麻烦. 我们将代价倒置,假设购买k次,那么第