ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Luogu P4550 收集邮票

2019-07-09 22:00:10  阅读:206  来源: 互联网

标签:邮票 Pr ch frac int Luogu sum P4550 式子


题目链接:Click here

Solution:

本题直接推价格似乎很难,考虑先从购买次数入手

设购买次数\(g(i)\)为当前有\(i\)种不同的邮票,要买到\(n\)种的期望购买次数

可以由期望的定义得到式子:\(g(x)=\sum_{i=0}^{+\infty}Pr(i,x)\),其中\(Pr(i,x)\)为买\(i\)次从\(x\)种买到\(n\)种的概率

对于一个局面,记它可以转移到的局面集合为\(to\),则它的期望可以表示为
\[ E(u)=\sum_{v\in to_u}(E(v)+cost(v,u))Pr(v) \]
其中\(Pr(v)\)表示从\(v\)局面转移到\(u\)局面的概率,\(cost(v,u)\)表示从\(v\)转移到\(u\)局面的的代价

那么对于本题也可以如此转化:\(g(x)=\frac{x}{n}(g(x)+1)+\frac{n-x}{n}(g(x+1)+1)\)

也很好理解,因为再抽一张卡,可能抽到已经抽到的,也可能抽到新的,而转移的代价都为1

显然,\(g(n)=0\),再把式子转化一下,就可以得到\(g(x)\)的计算方式:
\[ \frac{n-x}{n}g(x)=\frac{n-x}{n}g(x+1)+1\\ g(x)=g(x+1)+\frac{n}{n-x} \]
然后我们再考虑设\(f(i,j)\)表示当前有\(i\)种邮票,下次购买要花\(j\)元时,买到\(n\)种的期望花费

我们知道购买要\(j\)元,结合题意,就能很好的推出\(f(i,j)\)的转化方程:
\[ f(i,j)=\frac{i}{n}(f(i,j+1)+j)+\frac{n-i}{n}(f(i+1,j+1)+j)\\ f(i,j)=\frac{i}{n}f(i,j+1)+\frac{n-i}{n}f(i+1,j+1)+j\\ \]
我们考虑一下\(f(i,j)\)的定义,便可以得出式子:
\[ f(i,j)=\sum_{u=0}(j+(j+1)+\dots+(j+u-1))Pr(u,i)\\ f(i,j)=\sum_{u=0}\frac{u(2j+u-1)}{2}Pr(u,i)\\ \]
这里\(Pr\)的定义同上文\(g(x)\)定义式中的\(Pr\),然后我们再考虑表示\(f(i,j+1)\),很简单,带入即可
\[ f(i,j+1)=\sum_{u=0}\frac{u(2j+u+1)}{2}Pr(u,i) \]
考虑表示将\(f(i,j+1)\)减去\(f(i,j)\)可得:\(f(i,j+1)-f(i,j)=\sum_{u=0}uPr(u,i)\)

可以发现它与前面的期望定义式是一样的,则我们得到式子:\(f(i,j+1)=f(i,j)+g(i)\)

则我们可以把\(f(i,j)\)表示一下:
\[ f(i,j)=\frac{i}{n}f(i,j+1)+\frac{n-i}{n}f(i+1,j+1)+j\\ f(i,j)=\frac{i}{n}(f(i,j)+g(i))+\frac{n-i}{n}(f(i+1,j)+g(i+1))+j \]
事实上我们只需求出\(f(0,1)\),而在递推中可以发现\(j\)是没有变化的,则可以直接忽略\(j\)
\[ f(i)=\frac{i}{n}(f(i)+g(i))+\frac{n-i}{n}(f(i+1)+g(i+1))+1\\ \frac{n-i}{n}f(i)=\frac{i}{n}g(i)+\frac{n-i}{n}f(i+1)+\frac{n-i}{n}g(i+1)+1\\ f(i)=\frac{i}{n-i}g(i)+f(i+1)+g(i+1)+\frac{n}{n-i} \]

Code:

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+1;
int n;double u,f[N],g[N];
int read(){
    int x=0,f=1;char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
    return x*f;
}
int main(){
    n=read();f[n]=g[n]=0;u=n;
    for(int i=n-1;~i;i--) g[i]=g[i+1]+u/(u-i);
    for(int i=n-1;~i;i--){
        double x=i,y=n-i;
        f[i]=f[i+1]+g[i+1]+x/y*g[i]+u/y;
    }printf("%.2lf",f[0]);
    return 0;
}

题外话:推的时候发现了一个有趣的引理:设\(P(x)\)表示用\(x\)步刚好取到所有邮票的概率,则:
\[ P(x)=\frac{1}{n}\Pi_{i=0}^{n-2}\frac{n-i}{n}\Pi_{i=1}^{x-n}\frac{n-1}{n}\\ P(x)=\frac{n!(n-1)^{x-n}}{n^x} \]
式子也很好理解,保证最后取到没取到的那种,再取完其它的种类,剩下的步数只要不取到最后那枚就行

则本题也可以这样求:
\[ sum(n)=\sum_{i=1}^ni\\ E(0)=\sum_{i=n}^{+\infty}P(i)sum(i) \]
然后对这个式子求个通项就行了,不过我还不会求。。。

标签:邮票,Pr,ch,frac,int,Luogu,sum,P4550,式子
来源: https://www.cnblogs.com/NLDQY/p/11160719.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有