收集邮票 题解
本文网址:https://www.cnblogs.com/zsc985246/p/16366647.html ,转载请注明出处。
题目大意
有 种不同的物品,每天可以买一个,物品随机,第 天需要付 元钱,求买到所有物品的期望钱数。
输入
一个数, 。
输出格式
期望要付多少钱,保留 位小数。
思路
第 天需要付 元钱,考虑先求出期望需要多少天能买到所有物品。
设 为手中有 种物品的期望天数。
考虑当前买了 张物品,再买一个物品,有两种情况:
-
有 的概率买到重复的物品,此时仍只买到 个物品;即
-
有 的概率买到没买过的物品,此后就已买到 个物品。即
但是两种情况都多了一天,所以 。
化简一下:
初始 ,逆推求结果。
现在我们只有天数的期望,但是求的是钱数的期望。
-
若买到重复的物品,往后推了一天,所以总价格要多 元,还要加上增加的 元。即:
-
若买到没买过的物品,也往后推了一天,所以总价格要多 元,还要加上增加的 元。即:
所以
化简一下:
初始 ,逆推求结果。
最后输出 。
代码实现
#include<bits/stdc++.h>
#define ll long long
const ll N=10010;
using namespace std;
ll n;//物品种数
double day[N];//i种物品的期望天数
double f[N];//i种物品的期望钱数
int main(){
cin>>n;
for(ll i=n-1;i>=0;i--){//计算天数
day[i]=day[i+1]+n*1.0/(n-i);//公式
}
for(ll i=n-1;i>=0;i--){//计算答案
f[i]=i*1.0/(n-i)*day[i]+n*1.0/(n-i)+f[i+1]+day[i+1];//公式
}
cout<<fixed<<setprecision(2)<<f[0];
return 0;
}
尾声
如果你发现了问题,你可以直接回复这篇题解
如果你有更好的想法,也可以直接回复!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现