# Maximize the sum of arr[i]*i

Given an array of N integers. You are allowed to rearrange the element of the array. The task is to find the maximum value of Σarr[i]*i, where i = 0, 1, 2,…., n – 1.

Examples:

```Input : N = 4, arr[] = { 3, 5, 6, 1 }
Output : 31
If we arrange arr[] as { 1, 3, 5, 6 }.
Sum of arr[i]*i is 1*0 + 3*1 + 5*2 + 6*3
= 31, which is maximum

Input : N = 2, arr[] = { 19, 20 }
Output : 20
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

A simple solution is to generate all permutations of given array. For every permutation, compute the value of Σarr[i]*i and finally return the maximum value.

An efficient solution is based on the fact that the largest value should be scaled maximum and smallest value should be scaled minimum. So we multiply minimum value of i with minimum value of arr[i]. So, sort the given array in increasing order and compute the sum of ari]*i, where i = 0 to n-1.

Below is the implementation of this approach:

## C++

 `// CPP program to find the maximum value ` `// of i*arr[i] ` `#include ` `using` `namespace` `std; ` ` `  `int` `maxSum(``int` `arr[], ``int` `n) ` `{   ` `  ``// Sort the array ` `  ``sort(arr, arr + n); ` ` `  `  ``// Finding the sum of arr[i]*i ` `  ``int` `sum = 0; ` `  ``for` `(``int` `i = 0; i < n; i++) ` `    ``sum += (arr[i]*i); ` ` `  `  ``return` `sum; ` `} ` ` `  `// Driven Program ` `int` `main() ` `{ ` `  ``int` `arr[] = { 3, 5, 6, 1 }; ` `  ``int` `n = ``sizeof``(arr)/``sizeof``(arr[0]); ` ` `  `  ``cout << maxSum(arr, n) << endl; ` `  ``return` `0; ` `}  `

## Java

 `// Java program to find the ` `// maximum value of i*arr[i] ` `import` `java.util.*; ` ` `  `class` `GFG { ` ` `  `    ``static` `int` `maxSum(``int` `arr[], ``int` `n) ` `    ``{     ` `    ``// Sort the array ` `    ``Arrays.sort(arr); ` ` `  `    ``// Finding the sum of arr[i]*i ` `    ``int` `sum = ``0``; ` `    ``for` `(``int` `i = ``0``; i < n; i++) ` `        ``sum += (arr[i] * i); ` ` `  `    ``return` `sum; ` `    ``} ` ` `  `    ``// Driven Program ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `    ``int` `arr[] = { ``3``, ``5``, ``6``, ``1` `}; ` `    ``int` `n = arr.length; ` ` `  `    ``System.out.println(maxSum(arr, n)); ` ` `  `    ``} ` `} ` `// This code is contributed by Prerna Saini `

## Python3

 `# Python program to find the ` `# maximum value of i*arr[i] ` `def` `maxSum(arr,n): ` ` `  `    ``#  Sort the array ` `    ``arr.sort() ` ` `  `    ``# Finding the sum of  ` `    ``# arr[i]*i ` `    ``sum` `=` `0` `    ``for` `i ``in` `range``(n): ` `        ``sum` `+``=` `arr[i] ``*` `i ` `         `  `    ``return` `sum` ` `  `# Driver Program ` `arr ``=` `[``3``,``5``,``6``,``1``] ` `n ``=` `len``(arr) ` `print``(maxSum(arr,n)) ` ` `  `# This code is contributed ` `# by Shrikant13 `

## C#

 `// C# program to find the ` `// maximum value of i*arr[i] ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``// Function to find the ` `    ``// maximum value of i*arr[i] ` `    ``static` `int` `maxSum(``int``[] arr, ``int` `n) ` `    ``{  ` `         `  `        ``// Sort the array ` `        ``Array.Sort(arr); ` `     `  `        ``// Finding the sum of arr[i]*i ` `        ``int` `sum = 0; ` `        ``for` `(``int` `i = 0; i < n; i++) ` `            ``sum += (arr[i] * i); ` `     `  `        ``return` `sum; ` `    ``} ` ` `  `    ``// Driver code ` `    ``static` `public` `void` `Main() ` `    ``{ ` `        ``int``[] arr = {3, 5, 6, 1}; ` `        ``int` `n = arr.Length; ` `     `  `        ``Console.WriteLine(maxSum(arr, n)); ` ` `  `    ``} ` `} ` ` `  `// This code is contributed by Ajit. `

## PHP

 ` `

Output:

```31
```

Time Complexity : O(n Log n)

This article is contributed by Anuj Chauhan (anuj0503). If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.