【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次,那么第一张k元……第k张1元,那么就会发现代价变成了集齐的期望购买次数。

根据全期望公式:

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

然后移项解方程即可。

复杂度O(n)。

也可以直观地设计状态(不倒置代价),然后计算无穷:DaD3zZ

#include<cstdio>
double f[10010],g[10010],n;
int main()
{
    scanf("%lf",&n);
    for(int i=n-1;i>=0;i--)f[i]=f[i+1]+n/(n-i);
    for(int i=n-1;i>=0;i--)g[i]=g[i+1]+f[i+1]+i*f[i]/(n-i)+n/(n-i);
    printf("%.2lf",g[0]);
    return 0;
}

原文地址:https://www.cnblogs.com/onioncyc/p/6512045.html

时间: 2024-08-12 06:00:47

【BZOJ】1426: 收集邮票 期望DP的相关文章

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元钱. 现在皮皮手中没有邮票,皮皮想知道自己得到所有种类

【BZOJ1426】收集邮票 期望

[BZOJ1426]收集邮票 Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所以皮皮购买第k张邮票需要支付k元钱. 现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望. Input 一行,一个数字N N<=10000 Output 要付出多少钱. 保留二位小数 Sample Input 3 Sample O

BZOJ 3450 Tyvj1952 Easy 期望DP

题目大意:给定一个OX序列,一些点未确定,连续len长度的O会得到len^2的收益,求期望收益值 令f[i]为第i个点的期望收益值,l[i]为第i个点的期望长度 如果一个点是'O' 那么l[i]=l[i-1]+1 f[i]=f[i-1]+(l[i]*2-1) 如果一个点是'X' 那么l[i]=0 f[i]=f[i-1] 如果一个点是'?' 那么l[i]=(l[i-1]+1)/2 f[i]=f[i-1]+(l[i]*2-1) 等等 好像有些问题- - 如果一个点长度为1那么增加的收益显然是(1*2

BZOJ 2134 单选错位 期望DP

题目大意:给定一张n道选择题的试卷,所有答案都是正确的,但是第i个题的答案被答到了第i%n+1个位置上,求期望得分 第i道题的答案被填到了第i%n+1个位置上 期望得分是1/max(a[x],a[i%n+1]) 然后就水了233 #include <cstdio> #include <cstring> #include <iostream> #define M 10001000 #include <algorithm> using namespace std

[BZOJ 4318]OSU!(期望dp)

Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串.在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释) 现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数. Solution 和上一题差不多…双倍经验~ 平方的期望并不等于期望的平方,所以还

【BZOJ1426】收集邮票 概率DP 论文题 推公式题

链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/46468557"); } 题解: 并没有什么卵用,首先有一个神思路.然后神推公式.以下这篇博客写得非常详尽..另外题意是买第 i 次花 i 元,不是标号为 i 的邮票花 i 元. <strong">