#include #define X first #define Y second #define eb push_back #define siz(a) int(a.size()) #define endl "\n" #define trace2(x, y) cout <<#x<<": "< vi; typedef vector < ll > vll; const int mod=1e9+7; const int maxn=5555; /* finding inverse upto n * for i in xrange(2, N): ifc[i] = -(mod / i) * ifc[mod % i] % mod * */ ll power(ll base, ll exp){ll res = 1; while(exp){if(exp%2)res*=base;base*=base;res%=mod;base%=mod;exp/=2;}return res;} ll arr[maxn], sum[maxn][maxn], pre[maxn], up[maxn][maxn]; ll calc(ll y, ll x){ ll ans = 0; for(ll i =y; i<=x; i++){ for(ll j = i+1; j<=x; j++) ans += arr[i]*arr[j]; } return ans; } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL); //freopen("input.in", "r", stdin);freopen("output.out", "w", stdout); ll n, i; cin >> n; for(i=1; i<=n; i++) cin >> arr[i]; ll ans = -1e17, curr = 0; ll j; for(i=1; i<=n; i++){ for(j=i+1; j<=n; j++){ sum[i][j] += arr[i]*arr[j] + sum[i][j-1]; pre[j] += sum[i][j]; // trace4(i, j, sum[i][j], pre[j]); } } for(j=1; j<=n; j++) for(i=1; i<=n; i++) up[i][j] += up[i-1][j] + sum[i][j]; //for(i=1; i<=n; i++) //trace3(i, pre[i], calc(i)); for(i=1; i<=n; i++){ for(j=i+1; j<=n; j++){ ans = max(ans, pre[j] - up[i-1][j]); // trace5(i, j, calc(i, j), pre[j] - up[i-1][j], ans); } } cout << ans; return 0; }