幻象
题目大意
输入样例
3
50 50 50
输出样例
2.8
题目数据
解题思路
转移方程
f
i
=
f
i
−
1
+
[
(
a
i
−
1
+
1
)
2
−
(
a
i
−
1
)
2
]
∗
x
f_i=f_i~_-~_1 + [(a_i~_-~_1+1)^2-(a_i~_-~_1)^2]*x
fi=fi − 1+[(ai − 1+1)2−(ai − 1)2]∗x
x x x为输入的值(记得 除以100.0)
a i a_i ai为期望前面有多少个数与它相连
所以 a i a_i ai的转移为 a i = ( a i − 1 + 1 ) ∗ x a_i=(a_i~_-~_1+1)*x ai=(ai − 1+1)∗x
AC代码
#include<cstdio>
using namespace std;
int n;
double a[1000005],f[1000005];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
double x;
scanf("%lf",&x);
x/=100.0;
a[i]=(1.0*a[i-1]+1)*x;//预处理a
f[i]=f[i-1]+(1.0*a[i-1]*2+1)*x;//期望dp
}
printf("%.1lf",f[n]);
return 0;
}