bzoj 1426 收集邮票

来源:互联网 发布:microservices golang 编辑:程序博客网 时间:2024/06/08 14:13

1426: 收集邮票

Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 350 Solved: 284
[Submit][Status][Discuss]
Description

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

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

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

3
Sample Output

21.25
HINT

Source


【分析】
神题…

传送门

只能想到g,根本想不到f啊orz】


【代码】

//bzoj 1426 收集邮票#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#define ll long long#define M(a) memset(a,0,sizeof a)#define fo(i,j,k) for(int i=j;i<=k;i++)using namespace std;const int mxn=10005;double g[mxn],f[mxn];int n,m;int main(){    int i,j,k;    scanf("%d",&n);    f[n]=g[n]=0;    for(i=n-1;i>=0;i--) f[i]=f[i+1]+(double)n/(double)(n-i);    for(i=n-1;i>=0;i--) g[i]=g[i+1]+f[i+1]+f[i]*(double)i/(double)(n-i)+(double)n/(double)(n-i);    printf("%.2lf\n",g[0]);    return 0;}
0 0
原创粉丝点击