萌新求助站外期望入门题
  • 板块学术版
  • 楼主A_Đark_Horcrux
  • 当前回复11
  • 已保存回复11
  • 发布时间2020/10/25 19:44
  • 上次更新2023/11/5 09:53:24
查看原帖
萌新求助站外期望入门题
54372
A_Đark_Horcrux楼主2020/10/25 19:44

我要闯关,每一关耗费一时间,有 pip_i 的概率获胜,获胜则进入下一关,失败则回到第一关,求通过第n关的期望时间。

那就是说对于第i关有 pip_i 的概率耗费1时间通过,有 1pi1-p_i 的概率要用 j=1i1fj+1\sum_{j=1}^{i-1}f_j+1 的时间通过。fi=pi+(1pi)(j=1i1fj+1)\therefore f_i=p_i+(1-p_i)(\sum_{j=1}^{i-1}f_j+1) ,然后用一个变量记录前面 fjf_j 的和(类似前缀和),复杂度 O(n)O(n) ,最后结果就是 i=1nfi\sum_{i=1}^{n}f_i

全WA qaq

窝不是伸手党qaq

#include<cstdio>
using namespace std;
const int N=1e6+10;
const int mod=1e9+7;
int t,n,i,j; double s,q,p[N],f[N];
int main()
{
	scanf("%d",&n);
	for(i=1;i<=n;i++) scanf("%lf",&p[i]);//输入
	for(i=1;i<=n;i++)
	{
		q+=f[i-1];//前面的和
		f[i]=p[i]+(1-p[i])*(1+q);//递推
		//printf("%lf\n",f[i]);
	}
	for(i=1;i<=n;i++) s+=f[i];//结果
	printf("%lf",s);//输出
	return 0;
}
2020/10/25 19:44
加载中...