Skip to content
Related Articles

Related Articles

Improve Article

Get maximum items when other items of total cost of an item are free

  • Difficulty Level : Easy
  • Last Updated : 11 May, 2021
Geek Week

Given a list of prices of ‘N’ items. A person can buy only one item of any price and he can get other items for free such that the total price of the rest of the items doesn’t exceed the price of the bought item. The task is to find the maximum number of items the person can have.
Examples: 
 

Input: n = 5, arr = {5, 3, 1, 5, 6} 
Output:
The person can buy any item of price 5 or 6 and download items of prices 1 and 3 for free. So, he can get at most 3 items.
Input: n = 2, arr = {7, 7} 
Output:
 

 

Approach: 
 

The person should buy the most expensive item and then start taking the items starting from the least pricing (until the total price is lest than or equal to the bought item) in order to maximize the total number of items. 
Thus, we sort the list of prices and choose the last element, then we will iterate from 1st index to n-2 index and check if the total sum is less than or equal to the last element. 
 



Below is the implementation of the above approach: 
 

C++




// C++ implementation of
// the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to count the
// total number of items
int  items(int n, int a[]){
 
    // Sort the prices
    sort(a,a+n);
 
    // Choose the last element
    int z = a[n-1];
 
    // Initial count of item
    int x = 1;
 
    // Sum to keep track of
    // the total price
    // of free items
    int s = 0;
    for (int i=0;i<n-1;i++)
    {
        s += a[i];
 
        // If total is less than
        // or equal to z then
        // we will add 1 to the answer
        if (s <= z)
            x+= 1;
        else
            break;
    }
    return x;
}
int main()
{
int n = 5;
 
int a[]= {5, 3, 1, 5, 6};
 
cout<<items(n, a);
}
 
//contributed by Arnab Kundu

Java




// Java implementation of
// the above approach
import java.util.Arrays;
import java.io.*;
 
class GFG {
 
// Function to count the
// total number of items
static int items(int n, int a[]){
 
    // Sort the prices
    Arrays.sort(a);
 
    // Choose the last element
    int z = a[n-1];
 
    // Initial count of item
    int x = 1;
 
    // Sum to keep track of
    // the total price
    // of free items
    int s = 0;
    for (int i=0;i<n-1;i++)
    {
        s += a[i];
 
        // If total is less than
        // or equal to z then
        // we will add 1 to the answer
        if (s <= z)
            x+= 1;
        else
            break;
    }
    return x;
}
        // Driver code
    public static void main (String[] args) {
 
        int n = 5;
        int a[]= {5, 3, 1, 5, 6};
        System.out.println(items(n, a));
    }
//This code is contributed by ajit   
}

Python3




# Python3 implementation of
# the above approach
 
# Function to count the
# total number of items
def items(n, a):
 
    # Sort the prices
    a.sort()
 
    # Choose the last element
    z = a[n-1]
 
    # Initial count of item
    x = 1
 
    # Sum to keep track of
    # the total price
    # of free items
    s = 0
    for i in range(0, n-1):
 
        s += a[i]
 
        # If total is less than
        # or equal to z then
        # we will add 1 to the answer
        if (s <= z):
            x+= 1
        else:
            break
    return x
 
n = 5
a = [5, 3, 1, 5, 6]
print(items(n, a))

C#




// C# implementation of the
// above approach
using System;
 
class GFG
{
// Function to count the
// total number of items
static int items(int n, int []a)
{
 
    // Sort the prices
    Array.Sort(a);
 
    // Choose the last element
    int z = a[n - 1];
 
    // Initial count of item
    int x = 1;
 
    // Sum to keep track of
    // the total price
    // of free items
    int s = 0;
    for (int i = 0; i < n - 1; i++)
    {
        s += a[i];
 
        // If total is less than or equal to z
        // then we will add 1 to the answer
        if (s <= z)
            x += 1;
        else
            break;
    }
    return x;
}
 
// Driver code
static public void Main ()
{
    int n = 5;
    int []a = {5, 3, 1, 5, 6};
    Console.WriteLine(items(n, a));
}
}
 
// This code is contributed
// by akt_mit

PHP




<?php
//PHP implementation of
// the above approach
// Function to count the
// total number of items
 
function items($n, $a){
 
    // Sort the prices
    sort($a);
 
    // Choose the last element
    $z = $a[$n-1];
 
    // Initial count of item
    $x = 1;
 
    // Sum to keep track of
    // the total price
    // of free items
    $s = 0;
    for ($i=0;$i<$n-1;$i++)
    {
        $s += $a[$i];
 
        // If total is less than
        // or equal to z then
        // we will add 1 to the answer
        if ($s <= $z)
            $x+= 1;
        else
            break;
    }
    return $x;
}
//Code driven
$n = 5;
$a= array(5, 3, 1, 5, 6);
 
echo items($n, $a);
 
 
//This code is contributed by ajit
?>

Javascript




<script>
    // Javascript implementation of the above approach
     
    // Function to count the
    // total number of items
    function items(n, a)
    {
 
        // Sort the prices
        a.sort(function(a, b){return a - b});
 
        // Choose the last element
        let z = a[n - 1];
 
        // Initial count of item
        let x = 1;
 
        // Sum to keep track of
        // the total price
        // of free items
        let s = 0;
        for (let i = 0; i < n - 1; i++)
        {
            s += a[i];
 
            // If total is less than or equal to z
            // then we will add 1 to the answer
            if (s <= z)
                x += 1;
            else
                break;
        }
        return x;
    }
     
    let n = 5;
    let a = [5, 3, 1, 5, 6];
    document.write(items(n, a));
     
</script>
Output: 
3

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :