Untitled

 avatar
unknown
plain_text
a year ago
1.1 kB
11
Indexable
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, target;
vector<int> setArr;
vector<int> subset;
void sumOfSubsets(int currSum, int k, int remaining) {
if (currSum == target) {
cout << "Subset: ";
for (int x : subset) cout << x << " ";
cout << "\n";
return;
}
// Include setArr[k]
if (k < n && currSum + setArr[k] <= target) {
subset.push_back(setArr[k]);
sumOfSubsets(currSum + setArr[k], k + 1, remaining - setArr[k]);
subset.pop_back();
}
// Exclude setArr[k]
if (k < n && (currSum + remaining - setArr[k] >= target)) {
sumOfSubsets(currSum, k + 1, remaining - setArr[k]);
}
}
int main() {
cout << "Enter number of elements: ";
cin >> n;
setArr.resize(n);
cout << "Enter elements: ";
for (int i = 0; i < n; i++) cin >> setArr[i];
cout << "Enter target sum: ";
cin >> target;
sort(setArr.begin(), setArr.end()); // sort for efficiency
int total = 0;
for (int x : setArr) total += x;
cout << "\nSubsets with sum " << target << ":\n";
sumOfSubsets(0, 0, total);
return 0;
}
Editor is loading...
Leave a Comment