有点抽象啊!

为什么我 f 初始化 f[i]=-2e500 才能过啊,其他都会 WA 几个点啊。
#include<bits/stdc++.h>
using namespace std;
#define int long long
template<typename T>inline void read(T &x){
x=0;T f=1;char ch=getchar();
while(ch<48||ch>57){if(ch=='-'){f=-1;}ch=getchar();}
while(ch>=48&&ch<=57){x=x*10+ch-48;ch=getchar();}
x*=f;
}
template<typename T>inline void write(T x) {
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+48);
}
const int N=5E6+8;
double f[N];
int p[N];
double pw2[N];
signed main(){
int n;cin>>n;
for(int i=1;i<=n;i++){
cin>>p[i];
}
for(int i=1;i<=n;i++){
f[i]=-2e500;
}
// printf("%.8lf",f[1]);
f[0]=0;
pw2[0]=1.00;
for(int i=1;i<=n;i++) pw2[i]=pw2[i-1]*0.9;
for(int i=1;i<=n;i++){
for(int j=n;j>=1;j--){
f[j]=max(f[j],f[j-1]*0.9+1.00*p[i]);
}
}
for(int i=1;i<=n;i++){
double t=1;
for(int j=1;j<i;j++){
t+=pw2[i-j];
}
f[i]/=t;
}
double ans=-2e500;
for(int i=1;i<=n;i++){
ans=max(ans,f[i]-(1200.00/sqrt(i)));
}
printf("%.8lf",ans);
return 0;
}