// C++ code to implement the above approach
#include <bits/stdc++.h>
using namespace std;
int mini = INT_MAX;
// Function to form all possible subsets
void subset(vector<int> arr, int index, int sum, int total)
{
if (index >= arr.size()) {
if (sum != 0)
mini = min(mini, sum - (total - sum));
return;
}
subset(arr, index + 1, sum + arr[index], total);
subset(arr, index + 1, sum, total);
}
// Function to get the minimum difference
static void print(int index, vector<int>& arr, int total,
vector<int>& ans)
{
if (total == 0) {
int sum = 0;
for (int elements : ans) {
sum += elements;
}
// Function call to form subset
subset(ans, 0, 0, sum);
return;
}
if (index >= arr.size()) {
return;
}
ans.push_back(arr[index]);
print(index + 1, arr, total - 1, ans);
ans.pop_back();
print(index + 1, arr, total, ans);
}
// Utility function to solve the problem
void solve(vector<int>& arr, int N)
{
int selected = arr.size() - N;
if (selected <= 1) {
cout << -1;
return;
}
vector<int> ans;
print(0, arr, selected, ans);
}
// Driver code
int main()
{
vector<int> arr = { 7, 9, 5, 8, 1, 3 };
int N = 2;
solve(arr, N);
cout << (mini);
return 0;
}
// This code is contributed by rakeshsahni