AC 代码:
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
typedef long long ll;
using namespace std;
const int N = 5005;
int n,a[N],b[N],vis[N];
double ans = LLONG_MIN,dp[N][N],pre[N][N];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
for(int i = 1;i <= n;i++)cin >> a[i],b[i] = a[i];
for(int i = 0;i <= n;i++){
for(int j = 0;j <= n;j++){
pre[i][j] = LLONG_MIN;
}
}
for(int i = 1;i <= n;i++)dp[1][i] = a[i],pre[1][i] = max(pre[1][i - 1],dp[1][i]);
for(int i = 2;i <= n;i++){
for(int j = i/*this*/;j <= n;j++){
dp[i][j] = pre[i - 1][j - 1] * 0.9 + a[j];
pre[i][j] = max(pre[i][j - 1],dp[i][j]);
}
}
for(int i = 1;i <= n;i++){
double now = 1,fenzi = LLONG_MIN,fenmu = 0;
for(int j = i;j <= n;j++)fenzi = max(fenzi,dp[i][j]);
for(int j = 1;j <= i;j++){
fenmu = fenmu + now;
now = now * 0.9;
}
ans = max((long double)ans,fenzi / fenmu - 1200.0 * sqrtl(i * 1.00) / i);
}
cout << fixed << setprecision(12) << ans + 1e-7;
}
WA 了 12 个点的代码:
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
typedef long long ll;
using namespace std;
const int N = 5005;
int n,a[N],b[N],vis[N];
double ans = LLONG_MIN,dp[N][N],pre[N][N];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
for(int i = 1;i <= n;i++)cin >> a[i],b[i] = a[i];
for(int i = 0;i <= n;i++){
for(int j = 0;j <= n;j++){
pre[i][j] = LLONG_MIN;
}
}
for(int i = 1;i <= n;i++)dp[1][i] = a[i],pre[1][i] = max(pre[1][i - 1],dp[1][i]);
for(int i = 2;i <= n;i++){
for(int j = 1/*这里改成 1 了*/;j <= n;j++){
dp[i][j] = pre[i - 1][j - 1] * 0.9 + a[j];
pre[i][j] = max(pre[i][j - 1],dp[i][j]);
}
}
for(int i = 1;i <= n;i++){
double now = 1,fenzi = LLONG_MIN,fenmu = 0;
for(int j = i;j <= n;j++)fenzi = max(fenzi,dp[i][j]);
for(int j = 1;j <= i;j++){
fenmu = fenmu + now;
now = now * 0.9;
}
ans = max((long double)ans,fenzi / fenmu - 1200.0 * sqrtl(i * 1.00) / i);
}
cout << fixed << setprecision(12) << ans + 1e-7;
}
为啥改了一处就会 WA 呀……害的我交了 12 次才 AC……