link
代码
#include<cstdio>
long long x,maxx,dp[100010];int i,j,n;
long long read()
{
long long x=0;
int neg=1;
char c=getchar();
while(c<'0'||c>'9')
if(c=='-') neg=-1,c=getchar();
while(c>='0'&&c<='9')
x=10*x+c-'0',c=getchar();
x*=neg;
return x;
}
int main()
{
scanf("%d",&n);getchar();
for (i=1; i<=n; i++)
{
x=read();dp[i]=-1e18;
for (j=i; j>0; j--)
if(dp[j]<dp[j-1]+x*j)
dp[j]=dp[j-1]+j*x;
}
for (i=1; i<=n; i++)
if(dp[i]>maxx)
maxx=dp[i];
printf("%lld",maxx);
return 0;
}