涉及知识点:
solution:
- 首先枚举p和前缀的最大值,pre[i]表示p和a[1~i]的最大值乘积
- 然后枚举r和后缀的最大值,fpre[i]表示r和a[i~n]的最大值乘积
- 最后遍历1~n枚举q×a[i],ans = MAX(pre[i] + fpre[i] + q×a[i])
std:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 100005;
const ll inf = LLONG_MAX;
ll a[maxn];
ll pre[maxn],fpre[maxn];
int main()
{
ll n,p,q,r,ans = -inf;
cin>>n>>p>>q>>r;
for(int i=1;i<=n;i++)cin>>a[i];
pre[0] = -inf,fpre[n+1] = -inf;
for(int i=1;i<=n;i++)
pre[i] = max(pre[i-1] , a[i]*p);
for(int i=n;i>=1;i--)
fpre[i] = max(fpre[i+1],a[i]*r);
for(int i=1;i<=n;i++)
ans = max(ans , pre[i] + fpre[i] + a[i]*q);
cout<<ans<<endl;
return 0;
}