Minimize sum of smallest elements from K subsequences of length L
Last Updated :
12 May, 2021
Given an array arr[] of size N, the task is to find the minimum possible sum by extracting the smallest element from any K subsequences from arr[] of length L such that each of the subsequences have no shared element. If it is not possible to get the required sum, print -1.
Examples:
Input: arr[] = {2, 15, 5, 1, 35, 16, 67, 10}, K = 3, L = 2
Output: 8
Explanation:
Three subsequences of length 2 can be {1, 35}, {2, 15}, {5, 16}
Minimum element of {1, 35} is 1.
Minimum element of {2, 15} is 2.
Minimum element of {5, 16} is 5.
Their Sum is equal to 8 which is the minimum possible.
Input: arr[] = {19, 11, 21, 16, 22, 18, 14, 12}, K = 3, L = 3
Output: -1
Explanation:
It is not possible to construct 3 subsequences of length 3 from arr[].
Approach:
To optimize the above approach, we need to observe the following details:
- The K smallest elements of the array contribute to finding the minimum sum of the smallest elements of K subsequences.
- The length of the array must be greater than or equal to (K * L) in order to form K subsequences of length L.
Follow the steps below to solve the problem:
- Check if the size of the array arr[] is greater than equal to (K * L).
- If so, sort the array arr[] and print the sum of the first K elements of the array after sorting.
- Otherwise, return -1.
Below is the implementation of the above approach:
C++
// C++ Program to find the minimum
// possible sum of the smallest
// elements from K subsequences
#include <bits/stdc++.h>
using namespace std;
// Function to find the minimum sum
int findMinSum(int arr[], int K,
int L, int size)
{
if (K * L > size)
return -1;
int minsum = 0;
// Sort the array
sort(arr, arr + size);
// Calculate sum of smallest
// K elements
for (int i = 0; i < K; i++)
minsum += arr[i];
// Return the sum
return minsum;
}
// Driver Code
int main()
{
int arr[] = { 2, 15, 5, 1,
35, 16, 67, 10 };
int K = 3;
int L = 2;
int length = sizeof(arr)
/ sizeof(arr[0]);
cout << findMinSum(arr, K,
L, length);
return 0;
}
Java
// Java program to find the minimum
// possible sum of the smallest
// elements from K subsequences
import java.util.Arrays;
class GFG{
// Function to find the minimum sum
static int findMinSum(int []arr, int K,
int L, int size)
{
if (K * L > size)
return -1;
int minsum = 0;
// Sort the array
Arrays.sort(arr);
// Calculate sum of smallest
// K elements
for(int i = 0; i < K; i++)
minsum += arr[i];
// Return the sum
return minsum;
}
// Driver Code
public static void main(String args[])
{
int arr[] = { 2, 15, 5, 1,
35, 16, 67, 10 };
int K = 3;
int L = 2;
int length = arr.length;
System.out.print(findMinSum(arr, K,
L, length));
}
}
// This code is contributed by Ritik Bansal
Python3
# Python3 program to find the minimum
# possible sum of the smallest
# elements from K subsequences
# Function to find the minimum sum
def findMinSum(arr, K, L, size):
if (K * L > size):
return -1
minsum = 0
# Sort the array
arr.sort()
# Calculate sum of smallest
# K elements
for i in range(K):
minsum += arr[i]
# Return the sum
return minsum
# Driver code
if __name__ == '__main__':
arr = [2, 15, 5, 1,
35, 16, 67, 10]
K = 3
L = 2
length = len(arr)
print(findMinSum(arr, K, L, length))
# This code is contributed by Shivam Singh
C#
// C# program to find the minimum
// possible sum of the smallest
// elements from K subsequences
using System;
class GFG{
// Function to find the minimum sum
static int findMinSum(int []arr, int K,
int L, int size)
{
if (K * L > size)
return -1;
int minsum = 0;
// Sort the array
Array.Sort(arr);
// Calculate sum of smallest
// K elements
for(int i = 0; i < K; i++)
minsum += arr[i];
// Return the sum
return minsum;
}
// Driver Code
public static void Main()
{
int[] arr = { 2, 15, 5, 1,
35, 16, 67, 10 };
int K = 3;
int L = 2;
int length = arr.Length;
Console.Write(findMinSum(arr, K,
L, length));
}
}
// This code is contributed by code_hunt
JavaScript
<script>
// Javascript program to find the minimum
// possible sum of the smallest
// elements from K subsequences
// Function to find the minimum sum
function findMinSum(arr, K, L, size)
{
if (K * L > size)
return -1;
let minsum = 0;
// Sort the array
arr.sort((a, b) => a - b);
// Calculate sum of smallest
// K elements
for(let i = 0; i < K; i++)
minsum += arr[i];
// Return the sum
return minsum;
}
// Driver Code
let arr = [ 2, 15, 5, 1,
35, 16, 67, 10 ];
let K = 3;
let L = 2;
let length = arr.length;
document.write(findMinSum(arr, K,
L, length));
</script>
Time Complexity: O(N * log(N))
Space Complexity: O(1)
Similar Reads
Split array into K-length subsets to minimize sum of second smallest element of each subset Given an array arr[] of size N and an integer K (N % K = 0), the task is to split array into subarrays of size K such that the sum of 2nd smallest elements of each subarray is the minimum possible. Examples: Input: arr[] = {11, 20, 5, 7, 8, 14, 2, 17, 16, 10}, K = 5Output: 13Explanation: Splitting a
5 min read
Length of Smallest Subsequence such that sum of elements is greater than equal to K Given an array arr[] of size N and a number K, the task is to find the length of the smallest subsequence such that the sum of the subsequence is greater than or equal to number K.Example: Input: arr[] = {2, 3, 1, 5, 6, 3, 7, 9, 14, 10, 2, 5}, K = 35 Output: 4 Smallest subsequence with the sum great
6 min read
Minimum sum of medians of all possible K length subsequences of a sorted array Given a sorted array arr[] consisting of N integers and a positive integer K(such that N%K is 0), the task is to find the minimum sum of the medians of all possible subsequences of size K such that each element belongs to only one subsequence. Examples: Input: arr[] = {1, 2, 3, 4, 5, 6}, K = 2Output
7 min read
Number of K length subsequences with minimum sum Given an array arr[] of size N and an integer K, the task is to find the number of K length subsequences of this array such that the sum of these subsequences is the minimum possible. Examples: Input: arr[] = {1, 2, 3, 4}, K = 2 Output: 1 Subsequences of length 2 are (1, 2), (1, 3), (1, 4), (2, 3),
8 min read
Maximize subsequences having array elements not exceeding length of the subsequence Given an array arr[] consisting of N positive integers, the task is to maximize the number of subsequences that can be obtained from an array such that every element arr[i] that is part of any subsequence does not exceed the length of that subsequence. Examples: Input: arr[] = {1, 1, 1, 1} Output: 4
6 min read
Minimum cost for constructing the subsequence of length K from given string S Given a string S consisting of N lowercase English alphabets, and an integer K and, an array cost[] of size 26 denoting the cost of each lowercase English alphabet, the task is to find the minimum cost to construct a subsequence of length K from the characters of the string S. Examples: Input: S = "
11 min read