1. #include <vector>
  2. #include <iostream>
  3. #include <algorithm>
  4. using namespace std;
  5. int findleast(int *takings, int takingsLength, vector<int> &list, int daysLeft, int start, int currTotal, vector<int> &result, int expected)
  6. {
  7.  if (daysLeft == 0)
  8.   return currTotal;
  9.  
  10.  int closest = INT_MAX;
  11.  int closestIndex = start;
  12.  for (int i = start; i < takingsLength - daysLeft; ++i)
  13.  {
  14.   list.push_back(takings[i]);
  15.   int nextClosest = findleast(takings, takingsLength, list, daysLeft-1, i+1, currTotal + takings[i], result, expected);
  16.   list.pop_back();
  17.  
  18.   if (abs(nextClosest) < abs(closest))
  19.   {
  20.    closest = nextClosest;
  21.    closestIndex = i;
  22.   }
  23.  
  24.   if (nextClosest == expected)
  25.   {
  26.    result.push_back(takings[i]);
  27.    break;
  28.   }
  29.  }
  30.  
  31.  return closest;
  32. }
  33.  
  34. void print_int (int out)
  35. {
  36.  cout << out << endl;
  37. }
  38.  
  39. int main(int argc, char* argv[])
  40. {
  41.  int monthsTakings[] = {-50,-21,13,171,14,-42,-58,109,4,7,-23,-44,-98,-121,101, 33,87,-121,-40,-65,43,54,-45,-12,-12,38,25,3,7,8,};
  42.  
  43.  vector<int> list;
  44.  vector<int> result;
  45.  
  46.  int numDays = 9;
  47.  int best = findleast(monthsTakings, 31, list, numDays, 0, 0, result, 0);
  48.  cout << "Best result: " << best << endl;
  49.  result.clear();
  50.  findleast(monthsTakings, 31, list, numDays, 0, 0, result, best);
  51.  
  52.  for_each(result.begin(), result.end(), print_int);
  53.  
  54.  return 0;
  55. }
  56. View this file Here (Right Click and save As)