CF573E 题解
思路
根据题意,我们可以列出动态转移方程
程序
#include<bits/stdc++.h>
using namespace std;
long long i,j,n,x,Max,dp[100010];
signed main(){
scanf("%lld",&n);
for (i=1;i<=n;i++) dp[i]=-1e18;
for (i=1;i<=n;i++){
scanf("%lld",&x);
for (j=i;j>0;j--) dp[j]=max(dp[j],dp[j-1]+j*x);
}
for (i=1;i<=n;i++) Max=max(Max,dp[i]);
printf("%lld\n",Max);
return 0;
}
后记
使用语言 C++20,最慢的点跑了 3.59s,对于 6.00s 的时间限制绰绰有余。
至于为什么这么快,小蒟蒻也不知道(本来想写暴力再用火车头等等优化尝试艹过去但是一遍就过了那档事)。