VOOZH about

URL: https://www.geeksforgeeks.org/dsa/maximize-sum-of-minimum-and-maximum-of-all-groups-in-distribution/

⇱ Maximize sum of minimum and maximum of all groups in distribution - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Maximize sum of minimum and maximum of all groups in distribution

Last Updated : 23 Jul, 2025

Given an array arr[], and an integer N. The task is to maximize the sum of minimum and maximum of each group in a distribution of the array elements in N groups where the size of each group is given in an array b[] of size N.  

Examples:

Input: a[] = {17, 12, 11, 9, 8, 8, 5, 4, 3}, N = 3,  
b[] = {2, 3, 4}
Output: 60
Explanation: The array elements should be distributed in groups {17, 9} {12, 8, 8} {11, 5, 4, 3}.
So the sum becomes (17 + 9) + (12 + 8) + (11 + 3) = 26 + 20 + 14 = 60

Input: a[] = {12, 3, 4, 2, 5, 9, 8, 1, 2}, N = 3,  
b[] = {1, 4, 4}
Output: 45

Approach: This problem can be solved by using the Greedy Approach and some implementation. Follow the steps below to solve the given problem. 

  • sort array arr[] in descending order and b[] in ascending order.
  • Initialize a variable ans to store the output.
  • Iterate from i = 0 to i = N-1 in array a[] and add each element to ans.
  • Initialize a variable ind to store the index of elements of the array arr[]. Assign N to variable ind.
  • Take a loop from i=0 to N-1.
    • If b[i] > 0 then increment ind with (b[i]-1) 
    • Add arr[ind] to ans, as arr[ind] will be the smallest element of that group
    • increment ind with 1.
  • output the ans.

See the illustration below for better understanding.

Illustration:

Consider an example: arr[] = {17, 12, 11, 9, 8, 8, 5, 4, 3}, N = 3 and b[] = {2, 3, 4}

Firstly, sort array arr[] in descending order and b[] in ascending order, After then put the first N greatest element of array arr[] to each group as shown in fig.

👁 Image

Secondly, Fill each group with the rest of the element of array arr[] (one group at a time)

👁 Image

Therefore answer will contain the sum of the first N elements of array arr[]  i.e. 17, 12, 11 and also the last element which is filled in each group i.e. 9, 8 and 3.

Below is the implementation of the above approach. 

 
 


Output
60

Time complexity: O(M * logM) where M is the size of array arr.
Auxiliary Space: O(1)

Comment