真不知道和dp有啥关系
两个关键值,区间和和区间最小值
那么直接左右扩展一个点能作为最小值的最大区间(反正是正整数)
然后算就行了
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll ;
const int maxn=100001;
ll sum[maxn],com[maxn];
int n;
ll Aimee;
ll find(int x){
int l=x;
int r=x;
while(com[l-1]>=com[x]) l--;
while(com[r+1]>=com[x]) r++;
return com[x]*(sum[r]-sum[l-1]);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&com[i]);
sum[i]=sum[i-1]+com[i];
}
for(int i=1;i<=n;++i){
Aimee=max(Aimee,find(i));
}
cout<<Aimee;
return 0;
}