BZOJ - 4318

题目链接:BZOJ - 4318


三次方期望。

一次方期望:x1[i]=(x1[i-1]+1)*p
二次方期望:x2[i]=(x2[i-1]+2*x1[i-1]+1)*p
同时我们知道(x+1)^3-x^3=3*x^2+3*x+1

所以我们知道dp式子为:
dp[i]=dp[i-1]+(x2[i-1]*3+x1[i-1]*3+1)*p

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e5+10;
double dp1[N],dp2[N],dp3[N],p[N];	int n;	
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++)	scanf("%lf",&p[i]);
	for(int i=1;i<=n;i++){
		dp3[i]=dp3[i-1]+(3*dp2[i-1]+3*dp1[i-1]+1)*p[i];
		dp2[i]=(dp2[i-1]+2*dp1[i-1]+1)*p[i];
		dp1[i]=(dp1[i-1]+1)*p[i];
	}
	printf("%.1lf\n",dp3[n]);
	return 0;
}
发布了553 篇原创文章 · 获赞 242 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43826249/article/details/104216940