Answer:
The main function is given below. Appropriate comments are made where necessary. In addition to this, I added a full code for the problem to help you understand it fully
Step-by-step explanation:
// Sublist.cpp : Defines the entry point for the console application. 
 
// 
 
#include "stdafx.h" 
 
#include <iostream> 
 
#include <vector> 
 
using namespace std; 
 
int sumInStack = 0; 
 
int TARGET_SUM = 180; 
 
vector<int> choices; 
 
void subList(vector<int> data, int fromIndex, int endIndex); 
 
void print(); 
 
int main() 
{ 
 vector<int> dataSet; 
 int k, j, fromIndex,endIndex; 
 
 bool foundPerfect; 
 
 dataSet.push_back(20); dataSet.push_back(12); dataSet.push_back(22); 
 
 dataSet.push_back(15); dataSet.push_back(25); 
 
 dataSet.push_back(19); dataSet.push_back(29); 
 
 dataSet.push_back(18); 
 
 dataSet.push_back(11); dataSet.push_back(13); dataSet.push_back(17); 
 
 choices.clear(); 
 
 fromIndex=0; 
 
 endIndex=dataSet.size(); 
 
 cout << "Target time: " << TARGET_SUM << endl; 
 
 subList(dataSet, fromIndex, endIndex); 
 // code provided by student 
 system("pause"); 
 
 return 0; 
} 
void subList(vector<int> data, int fromIndex, int endIndex) { 
 /* 
 * Check if sum of elements stored in Stack is equal to the expected 
 * target sum. 
 * 
 * If so, call print method to print the candidate satisfied result. 
 */ 
 if (sumInStack == TARGET_SUM) 
 { 
 print(); 
 } 
 for (int currentIndex = fromIndex; currentIndex < endIndex; currentIndex++) 
 { 
 if (sumInStack + data[currentIndex] <= TARGET_SUM) 
 { 
 choices.push_back(data[currentIndex]); 
 sumInStack += data[currentIndex]; 
 /* 
 * Make the currentIndex +1, and then use recursion to proceed 
 * further. 
 */ 
 subList(data, currentIndex + 1, endIndex); 
 sumInStack -= choices.back(); 
 choices.pop_back(); 
 } 
 } 
 } 
void print() 
{ 
 cout<<TARGET_SUM<<" = "; 
 for(int i=0;i<choices.size();i++) 
 { 
 cout<<choices.at(i)<<"+"; 
 } 
}