今天at e题大疑惑
  • 板块灌水区
  • 楼主Llx2022
  • 当前回复4
  • 已保存回复5
  • 发布时间2023/11/4 21:54
  • 上次更新2023/11/5 07:19:15
查看原帖
今天at e题大疑惑
828664
Llx2022楼主2023/11/4 21:54

有点抽象啊!

为什么我 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;
}

链接

2023/11/4 21:54
加载中...