Maximize sum of chosen Array elements with value at most M
Last Updated :
13 Jul, 2022
Given an array arr[] of N positive numbers and an integer M. The task is to maximize the value of M by adding array elements when arr[i] ≤ M.
Note: Any array element can be added at most once.
Examples:
Input: arr[] = {3, 9, 19, 5, 21}, M = 10
Output: 67
Explanation: One way to getthe value is
M > 3; 3 is added to M and it becomes 10+3 = 13
M > 9; 9 is added to M and it becomes 13+9 = 22
M > 19; 19 is added to M and it becomes 22+19 = 41
M > 5; 5 is added to M and it becomes 41+5 = 46
M > 21; 21 is added to M and it becomes 46+21 = 67
Thus, M = 67 at the end.
Input: arr[] = {2, 13, 4, 19}, M = 6
Output: 12
Explanation: One way to get the value is
M > 4; 4 is added to M and it becomes 6+4 = 10
M > 2; 2 is added to M and it becomes 10+2 = 12
No other value in the array is smaller or equal to M.
Thus, M is 12 at the end.
Approach: The solution is based on the concept of sorting. Follow the steps mentioned below:
- First, sort the array in increasing order.
- For every index i, from 0 to N-1, do the following:
- If M ≥ arr[i], add arr[i] with M.
- If M< arr[i], stop iteration.
- Return the final value of M as the answer.
Below is the implementation of the above approach.
C++
// C++ code to implement the approach
#include <bits/stdc++.h>
using namespace std;
// Function to calculate
// the maximum value of M
// that can be obtained
int IsArrayHungry(int M, vector<int>& arr)
{
// Sort the array in increasing order.
sort(arr.begin(), arr.end());
long long sum = M;
int N = arr.size();
for (int i = 0; i < N; i++) {
if (sum >= arr[i])
sum += arr[i];
else
break;
}
return sum;
}
// Driver code
int main()
{
vector<int> arr{ 3, 9, 19, 5, 21 };
int M = 10;
int res = IsArrayHungry(M, arr);
cout << res;
return 0;
}
Java
// Java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
class GFG
{
// Function to calculate
// the maximum value of M
// that can be obtained
static int IsArrayHungry(int M, int arr[ ])
{
// Sort the array in increasing order.
Arrays.sort(arr);
int sum = M;
int N = arr.length;
for (int i = 0; i < N; i++) {
if (sum >= arr[i])
sum += arr[i];
else
break;
}
return sum;
}
// Driver code
public static void main (String[] args)
{
int arr[ ] = { 3, 9, 19, 5, 21 };
int M = 10;
int res = IsArrayHungry(M, arr);
System.out.print(res);
}
}
// This code is contributed by hrithikgarg03188.
Python3
# Python 3 code to implement the approach
# Function to calculate
# the maximum value of M
# that can be obtained
def IsArrayHungry(M, arr):
# Sort the array in increasing order.
arr.sort()
sum = M
N = len(arr)
for i in range(N):
if (sum >= arr[i]):
sum += arr[i]
else:
break
return sum
# Driver code
if __name__ == "__main__":
arr = [3, 9, 19, 5, 21]
M = 10
res = IsArrayHungry(M, arr)
print(res)
# This code is contributed by ukasp.
C#
// C# code to implement above approach
using System;
class GFG
{
// Function to calculate
// the maximum value of M
// that can be obtained
static int IsArrayHungry(int M, int []arr)
{
// Sort the array in increasing order.
Array.Sort(arr);
int sum = M;
int N = arr.Length;
for (int i = 0; i < N; i++) {
if (sum >= arr[i])
sum += arr[i];
else
break;
}
return sum;
}
// Driver Code:
public static void Main()
{
int []arr = { 3, 9, 19, 5, 21 };
int M = 10;
int res = IsArrayHungry(M, arr);
Console.WriteLine(res);
}
}
// This code is contributed by Samim Hossain Mondal.
JavaScript
<script>
// JavaScript code for the above approach
// Function to calculate
// the maximum value of M
// that can be obtained
function IsArrayHungry(M, arr)
{
// Sort the array in increasing order.
arr.sort(function (a, b) { return a - b })
let sum = M;
let N = arr.length;
for (let i = 0; i < N; i++) {
if (sum >= arr[i])
sum += arr[i];
else
break;
}
return sum;
}
// Driver code
let arr = [3, 9, 19, 5, 21];
let M = 10;
let res = IsArrayHungry(M, arr);
document.write(res);
// This code is contributed by Potta Lokesh
</script>
Time Complexity: O(N * logN)
Auxiliary Space: O(1), since no extra space has been added.
Similar Reads
Maximize number of elements from Array with sum at most K Given an array A[] of N integers and an integer K, the task is to select the maximum number of elements from the array whose sum is at most K. Examples: Input: A[] = {1, 12, 5, 111, 200, 1000, 10}, K = 50 Output: 4 Explanation: Maximum number of selections will be 1, 12, 5, 10 that is 1 + 12 + 5 + 1
6 min read
Maximize the sum of modulus with every Array element Given an array A[] consisting of N positive integers, the task is to find the maximum possible value of: F(M) = M % A[0] + M % A[1] + .... + M % A[N -1] where M can be any integer value Examples: Input: arr[] = {3, 4, 6} Output: 10 Explanation: The maximum sum occurs for M = 11. (11 % 3) + (11 % 4)
4 min read
Maximize total set bits of elements in N sized Array with sum M Given two integers N and M denoting the size of an array and the sum of the elements of the array, the task is to find the maximum possible count of total set bits of all the elements of the array such that the sum of the elements is M. Examples: Input: N = 1, M = 15Output: 4Explanation: Since N =1,
8 min read
Maximize count of K unique elements that can be chosen from Array Given an arrays arr[] of size N and an array of queries Q[] of size M, where Q[i] defines the count of unique elements that have to be chosen from the array arr[]. The task to find the maximum number of elements that can be picked for each query. Examples: Input: arr[ ] = {30, 31, 32, 33, 32, 32, 31
6 min read
Maximize array sum by replacing at most L elements to R for Q queries Given an array arr[] consisting of N integers and an array Query[][] consisting of M pairs of the type {L, R}, the task is to find the maximum sum of the array by performing the queries Query[][] such that for each query {L, R} replace at most L array elements to the value R. Examples: Input: arr[]=
7 min read
Count the maximum number of elements that can be selected from the array Given an array arr[], the task is to count the maximum number of elements that can be selected from the given array following the below selection process: At 1st selection, select an element which is greater than or equal to 1.At 2nd selection, select an element which is greater than or equal to 2.A
5 min read