Marvolo Gaunt’s Ring
求p * i + q * j + r * k(i<=j<=k)的最大值
虽然题中给的时间比较长但还是不可以用直接暴力用三次for循环,一定可以用一遍循环过的。下面这种方法一定要牢记,感觉经常用到。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int Max=1e5+10;
int a[Max];
int main()
{
ll n,p,q,r;
scanf("%lld%lld%lld%lld",&n,&p,&q,&r);
for(ll i=0;i<n;i++)
scanf("%d",&a[i]);
ll maxs1=a[0]*p;
ll maxs2=maxs1+a[0]*q;
ll maxs3=maxs2+a[0]*r;
for(ll i=1;i<n;i++)
{
maxs1=max(maxs1,a[i]*p);
maxs2=max(maxs2,maxs1+a[i]*q);
maxs3=max(maxs3,maxs2+a[i]*r);
}
printf("%lld\n",maxs3);
return 0;
}