# Find the Maximum possible Sum for the given conditions

• Last Updated : 11 Jun, 2021

Given an array arr[] of size N, the task is to find the maximum possible sum of the array by following the given conditions:

• At every step, only one element can be used to increase the sum.
• If some element K is selected from the array, the remaining numbers in the array get reduced by one.
• The elements in the array can’t be reduced past 0.

Examples:

Attention reader! All those who say programming isn't for kids, just haven't met the right mentors yet. Join the  Demo Class for First Step to Coding Coursespecifically designed for students of class 8 to 12.

The students will get to learn more about the world of programming in these free classes which will definitely help them in making a wise career choice in the future.

Input: arr = {6, 6, 6}
Output: 15
Explanation:
Initially, the total sum is 0. Since all the elements are equal, any one element is chosen.
Sum after choosing the first six = 6. Remaining elements = {5, 5}.
Sum after choosing the five = 11. Remaining elements = {4}.
Finally, four is chosen making the maximum sum 15.

Input: arr = {0, 1, 0}
Output:
Explanation:
Initially, the total sum is 0. There is only one number that can be chosen in the array because rest of the elements are 0.
Therefore, the maximum sum = 1.

Approach: Since the value of all the other elements gets reduced by 1, clearly, we get the maximum sum if we choose the maximum element at every iteration. Therefore, in order to do this, sorting is used.

• The idea is to sort the elements of the array in descending order.
• Now, since we get to choose the maximum value at every iteration, we calculate the value of the element K at some index ‘i’ as (K – i).
• If at any index the value of the element becomes 0, then all the elements past that index will be 0.

Below is the implementation of the above approach:

## C++

 `// C++ program to find the maximum``// possible Sum for the given conditions``#include``using` `namespace` `std;` `// Function to find the maximum``// possible sum for the``// given conditions``int` `maxProfit(``int` `arr[], ``int` `n)``{``    ` `    ``// Sorting the array``    ``sort(arr, arr + n, greater<``int``>());` `    ``// Variable to store the answer``    ``int` `ans = 0;` `    ``// Iterating through the array``    ``for``(``int` `i = 0; i < n; i++)``    ``{``       ` `       ``// If the value is greater than 0``       ``if` `((arr[i] - (1 * i)) > 0)``           ``ans += (arr[i] - (1 * i));``       ` `       ``// If the value becomes 0``       ``// then break the loop because``       ``// all the weights after this``       ``// index will be 0``       ``if` `((arr[i] - (1 * i)) == 0)``           ``break``;``    ``}``    ` `    ``// Print profit``    ``return` `ans;``}` `// Driver code``int` `main()``{``    ``int` `arr[] = {6, 6, 6};``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);``    ` `    ``cout << maxProfit(arr, n);``    ``return` `0;``}` `// This code is contributed by ankitkumar34`

## Java

 `// Java program to find the maximum``// possible Sum for the given conditions``import` `java.util.Arrays;``import` `java.util.Collections;` `public` `class` `GFG{` `    ``// Function to find the maximum``    ``// possible sum for the``    ``// given conditions``    ``static` `int` `maxProfit(Integer [] arr)``    ``{``        ` `        ``// Sorting the array``        ``Arrays.sort(arr, Collections.reverseOrder());``    ` `        ``// Variable to store the answer``        ``int` `ans = ``0``;``    ` `        ``// Iterating through the array``        ``for``(``int` `i = ``0``; i < arr.length; i++)``        ``{``    ` `           ``// If the value is greater than 0``           ``if` `((arr[i] - (``1` `* i)) > ``0``)``               ``ans += (arr[i] - (``1` `* i));``    ` `           ``// If the value becomes 0``           ``// then break the loop because``           ``// all the weights after this``           ``// index will be 0``           ``if` `((arr[i] - (``1` `* i)) == ``0``)``               ``break``;``        ``}``        ` `        ``// Print profit``        ``return` `ans;``    ``}``    ` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``Integer arr[] = { ``6``, ``6``, ``6` `};``    ``System.out.println(maxProfit(arr));``}``}` `// This code is contributed by AnkitRai01`

## Python3

 `# Python3 program to find the maximum``# possible Sum for the given conditions` `# Function to find the maximum``# possible sum for the``# given conditions``def` `maxProfit(arr):``    ` `    ``# Sorting the array``    ``arr.sort(reverse ``=` `True``)` `    ``# Variable to store the answer``    ``ans ``=` `0` `    ``# Iterating through the array``    ``for` `i ``in` `range``(``len``(arr)):` `        ``# If the value is greater than 0``        ``if` `(arr[i]``-``(``1` `*` `i))>``0``:``            ``ans``+``=``(arr[i]``-``(``1` `*` `i))` `        ``# If the value becomes 0``        ``# then break the loop because``        ``# all the weights after this``        ``# index will be 0``        ``if` `(arr[i]``-``(``1` `*` `i))``=``=` `0``:``            ``break` `    ``# print profit``    ``return` `ans   ` `# Driver code``if` `__name__ ``=``=` `"__main__"``:`` ` `    ``arr ``=` `[``6``, ``6``, ``6``]` `    ``print``(maxProfit(arr))`` `

## C#

 `// C# program to find the maximum``// possible Sum for the given conditions``using` `System;` `class` `GFG{` `// Function to find the maximum``// possible sum for the``// given conditions``static` `int` `maxProfit(``int``[] arr)``{``        ` `    ``// Sorting the array``    ``Array.Sort(arr);``    ``Array.Reverse(arr);``    ` `    ``// Variable to store the answer``    ``int` `ans = 0;``    ` `    ``// Iterating through the array``    ``for``(``int` `i = 0; i < arr.Length; i++)``    ``{``       ` `       ``// If the value is greater than 0``       ``if` `((arr[i] - (1 * i)) > 0)``           ``ans += (arr[i] - (1 * i));``       ` `       ``// If the value becomes 0``       ``// then break the loop because``       ``// all the weights after this``       ``// index will be 0``       ``if` `((arr[i] - (1 * i)) == 0)``           ``break``;``    ``}``        ` `    ``// Print profit``    ``return` `ans;``}``    ` `// Driver code``static` `public` `void` `Main ()``{``    ``int``[] arr = { 6, 6, 6 };``    ` `    ``Console.Write(maxProfit(arr));``}``}` `// This code is contributed by Shubhamsingh10`

## Javascript

 ``
Output:
`15`

My Personal Notes arrow_drop_up