Problem: Given a set of integers, find all subsets that sum up to a given target.

Approach:

  1. Use backtracking to explore each subset.
  2. Keep track of the current sum and stop exploring further if it exceeds the target.

Code Example:

#include <iostream>
#include <vector>

using namespace std;

void findSubsetsThatSumToTarget(vector<int>& nums, vector<int>& current, int index, int target, vector<vector<int>>& result) {
    if (target == 0) {
        result.push_back(current);
        return;
    }
    if (index == nums.size() || target < 0) {
        return;
    }
    // Exclude current element
    findSubsetsThatSumToTarget(nums, current, index + 1, target, result);
    // Include current element
    current.push_back(nums[index]);
    findSubsetsThatSumToTarget(nums, current, index + 1, target - nums[index], result);
    current.pop_back();
}

vector<vector<int>> subsetsThatSumToTarget(vector<int>& nums, int target) {
    vector<vector<int>> result;
    vector<int> current;
    findSubsetsThatSumToTarget(nums, current, 0, target, result);
    return result;
}

int main() {
    vector<int> nums = {2, 3, 5, 7};
    int target = 7;
    vector<vector<int>> result = subsetsThatSumToTarget(nums, target);
    for (const auto& subset : result) {
        for (int num : subset) {
            cout << num << " ";
        }
        cout << endl;
    }
    return 0;
}