题目描述
有 nn 种不同的邮票,皮皮想收集所有种类的邮票。唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是 nn 种邮票中的哪一种是等概率的,概率均为 1/n1/n。但是由于凡凡也很喜欢邮票,所以皮皮购买第 kk 次邮票需要支付 kk 元钱。
现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望。
输入格式
一行,一个数字 NN(N \le 10000N≤10000)。
输出格式
输出要付出多少钱,保留二位小数。
输入输出样例
输入 #1复制
3
输出 #1复制
21.25
直接上AC代码:
#include <bits/stdc++.h>
using namespace std;
const int maxm=1e5+5;
double cnt[maxm];
double cost[maxm];
int n;
signed main(){
cin>>n;
cnt[n]=cost[n]=0;
for(int i=n-1;i>=0;i--){
cnt[i]=cnt[i+1]+n*1.0/(n-i);
cost[i]=i*1.0/(n-i)*cnt[i]+cost[i+1]+cnt[i+1]+n*1.0/(n-i);
}
printf("%.2f\n",cost[0]);
return 0;
}
给关注吧