Maximise the number of toys that can be purchased with amount K

Given an array consisting of cost of toys. Given an integer K depicting the amount of money available to purchase toys. Write a program to find the maximum number of toys one can buy with the amount K.

Note: One can buy only 1 quantity of a particular toy.

Examples :



Input:  N = 10, K =  50
        cost = { 1, 12, 5, 111, 200, 1000, 10, 9, 12, 15 }
Output: 6
Explanation: Toys with amount 1, 5, 9, 10, 12, and 12 
can be purchased resulting in a total amount of 49. Hence,
maximum number of toys is 6.

Input: N = 7, K = 50
       cost = { 1, 12, 5, 111, 200, 1000, 10 }
Output: 4

The idea to solve this problem is to first sort the cost array in ascending order. This will arrange the toys in increasing order of the cost. Now iterate over the cost array and keep calculating the sum of costs until the sum is less than or equal to K. Finally return the number of toys used to calculate the sum which is just less than or equals to K.

Below image is an illustration of the above approach:

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ Program to maximize the
// number of toys with K amount
#include <bits/stdc++.h>
using namespace std;
  
// This functions returns the required
// number of toys
int maximum_toys(int cost[], int N, int K)
{
    int count = 0, sum = 0;
  
    // sort the cost array
    sort(cost, cost + N);
    for (int i = 0; i < N; i++) {
  
        // Check if we can buy ith toy or not 
        if (sum +cost[i] <= K) 
        {
            sum = sum + cost[i];
            // Increment count
            count++;
        }
    }
    return count;
}
  
// Driver Code
int main()
{
    int K = 50;
    int cost[] = { 1, 12, 5, 111, 200, 1000, 10, 9, 12, 15 };
    int N = sizeof(cost) / sizeof(cost[0]);
  
    cout << maximum_toys(cost, N, K) << endl;
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java Program to maximize the
// number of toys with K amount
import java.io.*;
import java .util.*;
  
class GFG 
{
// This functions returns 
// the required number of toys
static int maximum_toys(int cost[], 
                        int N, int K)
{
    int count = 0, sum = 0;
  
    // sort the cost array
    Arrays.sort(cost);
    for (int i = 0; i < N; i++) 
    {
  
        // Check if we can buy ith toy or not 
        if (sum +cost[i] <= K) 
        {
            sum = sum + cost[i];
            // Increment count
            count++;
        }
    }
    return count;
}
  
// Driver Code
public static void main (String[] args) 
{
int K = 50;
int cost[] = {1, 12, 5, 111, 200,
            1000, 10, 9, 12, 15};
int N = cost.length;
  
System.out.print( maximum_toys(cost, N, K));
}
}
  
// This code is contributed by anuj_67.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 Program to maximize the
# number of toys with K amount
  
# This functions returns the required
# number of toys
def maximum_toys(cost, N, K):
    count = 0
    sum = 0
  
    # sort the cost array
    cost.sort(reverse = False)
    for i in range(0, N, 1):
          
        # Check if we can buy ith toy or not
        if (sum+cost[i] <= K):
            sum = sum + cost[i]
            # Increment the count variable
            count += 1
      
    return count
  
# Driver Code
if __name__ == '__main__':
    K = 50
    cost = [1, 12, 5, 111, 200
            1000, 10, 9, 12, 15]
    N = len(cost)
  
    print(maximum_toys(cost, N, K))
  
# This code is contributed by
# Sanjit_Prasad

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# Program to maximize the
// number of toys with K amount
using System;
  
class GFG 
{
// This functions returns 
// the required number of toys
static int maximum_toys(int []cost, 
                        int N, int K)
{
    int count = 0, sum = 0;
  
    // sort the cost array
    Array.Sort(cost);
    for (int i = 0; i < N; i++) 
    {
  
        // Check if we can buy ith toy or not 
        if (sum +cost[i] <= K) 
        {
            sum = sum + cost[i];
            // Increment count
            count++;
        }
    }
    return count;
}
  
// Driver Code
public static void Main () 
{
int K = 50;
int []cost = {1, 12, 5, 111, 200,
            1000, 10, 9, 12, 15};
int N = cost.Length;
  
Console.Write( maximum_toys(cost, N, K));
}
}
  
// This code is contributed by anuj_67.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP Program to maximize the
// number of toys with K amount
  
// This functions returns 
// the required number of toys
function maximum_toys($cost, $N, $K)
{
    $count = 0; $sum = 0;
  
    // sort the cost array
        sort($cost);
    for ($i = 0; $i < $N; $i++) 
    {
  
            // Check if we can buy ith toy or not 
        if ($sum + $cost[$i] <= $K
        {
            $sum = $sum + $cost[$i];
            // Increment the count variable
            $count++;
        }
    }
    return $count;
}
  
// Driver Code
$K = 50;
$cost = array(1, 12, 5, 111, 200, 
            1000, 10, 9, 12, 15 );
$N = count($cost);
  
echo maximum_toys($cost, $N, $K),"\n";
  
// This code is contributed by anuj_67
?>

chevron_right


Output :

6

Time Complexity : O(N * logN), where N is the size of cost array.



My Personal Notes arrow_drop_up

Recommended Posts:



    Article Tags :
    Practice Tags :


    1


    Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.