问题描述:
给你一个包含 n 个整数数列 A 和三个整数 ,要求你从数列 中选取三个数 ,保证 ,使得 最大。
注意:x 值可能为负数。
数据范围:
思路:
我们令 表示从中的最大值.令表示从中的最大值.
最后枚举,
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e5+1;
const ll inf=0x3f3f3f3f3f3f3f3f;
ll num[N];
ll a[N];
ll b[N];
ll n,p,r,q;
int main(){
cin>>n>>p>>q>>r;
for (int i=1;i<=n;i++)
cin>>num[i];
a[1]=num[1]*p;
b[n]=num[n]*r;
ll ans=-inf;
for (int i=2;i<=n;i++)
a[i]=max(a[i-1],num[i]*p);
for (int i=n-1;i>=1;i--)
b[i]=max(b[i+1],num[i]*r);
for (int i=1;i<=n;i++)
ans=max(ans,a[i]+num[i]*q+b[i]);
printf("%lld\n",ans);
}