Problem:
Score : 500 points

Problem Statement

There are N children standing in a line from left to right. The activeness of the i-th child from the left is A_i.

You can rearrange these children just one time in any order you like.

When a child who originally occupies the x-th position from the left in the line moves to the y-th position from the left, that child earns A_x \times |x-y| happiness points.

Find the maximum total happiness points the children can earn.

Constraints

2 \leq N \leq 2000

1 \leq A_i \leq 10^9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N

Output

Print the maximum total happiness points the children can earn.

Sample Input 1

4
1 3 4 2

Sample Output 1

20

If we move the 1-st child from the left to the 3-rd position from the left, the 2-nd child to the 4-th position, the 3-rd child to the 1-st position, and the 4-th child to the 2-nd position, the children earns 1 \times |1-3|+3 \times |2-4|+4 \times |3-1|+2 \times |4-2|=20 happiness points in total.

Sample Input 2

6
5 5 6 1 1 1

Sample Output 2

58

Sample Input 3

6
8 6 9 1 2 1

Sample Output 3

85

Solution in Python (3.8.2) (judge verdict: Time Limit Exceeded)

import sys

sys.setrecursionlimit(10**7)

n = 0
a = []

sorted_a = []

def format_input(filename = None):
	global n
	global a
	if filename == None:
		n = int(input())
		a = list(map(int, input().split()))

	elif filename == '__random__':
		from random import randint as rng
		n = rng(2, 2 * 10**3)
		a = [rng(1, 10**9) for i in range(n)]
		print(n)
		print(' '.join(list(map(str, a))))

	global sorted_a
	sorted_a = list(reversed(sorted(a)))

def sum_happiness(left, right):
	if left + right >= n:
		return 0
	activeness = sorted_a[left + right]
	indexes = [i for i in range(n) if a[i] == activeness]
	offset = left + right - sorted_a.index(activeness)

	left_happiness = activeness * (indexes[offset] - left) + sum_happiness(left + 1, right)
	right_happiness = activeness * (n - 1 - right - indexes[offset]) + sum_happiness(left, right + 1)
	return max(left_happiness, right_happiness)

def get_answer():
	return sum_happiness(0, 0)

if __name__ == '__main__':
	format_input()

	ans = get_answer()
	print(ans)