- #include <iostream> 
- #include <vector> 
- using namespace std; 
-   
- void printKnapsack(const vector<int>& knapsack) { 
-     cout << "["; 
-     for (int x : knapsack)      // range for : x will be called for each int in the knapsack vector 
-         cout << x <<" "; 
-     cout<<"]"<<endl;  
- } 
-   
- void print_solutions(int current_item, vector<int>& knapsack, int current_sum, const vector<int>& items, int limit) { 
-     //if all items have been processed print the solution and return 
-     if (current_item == items.size() ) { 
-         printKnapsack(knapsack); 
-         return; 
-     }; 
-   
-     //don't take the current item and go check others 
-     vector<int> knapcopy = knapsack;  
-     print_solutions(current_item + 1, knapcopy, current_sum, items, limit); 
-   
-     //take the current item if the value doesn't exceed the limit 
-     if (current_sum + items[current_item] <= limit) { 
-         knapsack.push_back(items[current_item]); 
-         current_sum += items[current_item]; 
-         //current item taken go check others 
-         print_solutions(current_item + 1, knapsack, current_sum, items, limit); 
-     }; 
- }; 
-   
-   
- int main() { 
-     int current_item = 0; 
-     int current_sum = 0; 
-     int limit, n; 
-     cout << "Type the maximum weight "; 
-     cin >> limit; 
-     cout << "How many items?  "; 
-     cin >> n; 
-   
-     vector<int> knapsack;   // empty vector 
-     vector<int> items(n);   // vector with n elements 
-   
-     cout << "Type weights."; 
-     for (int i = 0; i < n; i++) { 
-         cin >> items[i]; 
-     }; 
-   
-     print_solutions(0, knapsack, 0, items, limit);  // n not needed 
-   
-     return 0; 
-   
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBwcmludEtuYXBzYWNrKGNvbnN0IHZlY3RvcjxpbnQ+JiBrbmFwc2FjaykgewogICAgY291dCA8PCAiWyI7CiAgICBmb3IgKGludCB4IDoga25hcHNhY2spICAgICAgLy8gcmFuZ2UgZm9yIDogeCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBpbnQgaW4gdGhlIGtuYXBzYWNrIHZlY3RvcgogICAgICAgIGNvdXQgPDwgeCA8PCIgIjsKICAgIGNvdXQ8PCJdIjw8ZW5kbDsgCn0KCnZvaWQgcHJpbnRfc29sdXRpb25zKGludCBjdXJyZW50X2l0ZW0sIHZlY3RvcjxpbnQ+JiBrbmFwc2FjaywgaW50IGN1cnJlbnRfc3VtLCBjb25zdCB2ZWN0b3I8aW50PiYgaXRlbXMsIGludCBsaW1pdCkgewogICAgLy9pZiBhbGwgaXRlbXMgaGF2ZSBiZWVuIHByb2Nlc3NlZCBwcmludCB0aGUgc29sdXRpb24gYW5kIHJldHVybgogICAgaWYgKGN1cnJlbnRfaXRlbSA9PSBpdGVtcy5zaXplKCkgKSB7CiAgICAgICAgcHJpbnRLbmFwc2FjayhrbmFwc2Fjayk7CiAgICAgICAgcmV0dXJuOwogICAgfTsKCiAgICAvL2Rvbid0IHRha2UgdGhlIGN1cnJlbnQgaXRlbSBhbmQgZ28gY2hlY2sgb3RoZXJzCiAgICB2ZWN0b3I8aW50PiBrbmFwY29weSA9IGtuYXBzYWNrOyAKICAgIHByaW50X3NvbHV0aW9ucyhjdXJyZW50X2l0ZW0gKyAxLCBrbmFwY29weSwgY3VycmVudF9zdW0sIGl0ZW1zLCBsaW1pdCk7CgogICAgLy90YWtlIHRoZSBjdXJyZW50IGl0ZW0gaWYgdGhlIHZhbHVlIGRvZXNuJ3QgZXhjZWVkIHRoZSBsaW1pdAogICAgaWYgKGN1cnJlbnRfc3VtICsgaXRlbXNbY3VycmVudF9pdGVtXSA8PSBsaW1pdCkgewogICAgICAgIGtuYXBzYWNrLnB1c2hfYmFjayhpdGVtc1tjdXJyZW50X2l0ZW1dKTsKICAgICAgICBjdXJyZW50X3N1bSArPSBpdGVtc1tjdXJyZW50X2l0ZW1dOwogICAgICAgIC8vY3VycmVudCBpdGVtIHRha2VuIGdvIGNoZWNrIG90aGVycwogICAgICAgIHByaW50X3NvbHV0aW9ucyhjdXJyZW50X2l0ZW0gKyAxLCBrbmFwc2FjaywgY3VycmVudF9zdW0sIGl0ZW1zLCBsaW1pdCk7CiAgICB9Owp9OwoKCmludCBtYWluKCkgewogICAgaW50IGN1cnJlbnRfaXRlbSA9IDA7CiAgICBpbnQgY3VycmVudF9zdW0gPSAwOwogICAgaW50IGxpbWl0LCBuOwogICAgY291dCA8PCAiVHlwZSB0aGUgbWF4aW11bSB3ZWlnaHQgIjsKICAgIGNpbiA+PiBsaW1pdDsKICAgIGNvdXQgPDwgIkhvdyBtYW55IGl0ZW1zPyAgIjsKICAgIGNpbiA+PiBuOwoKICAgIHZlY3RvcjxpbnQ+IGtuYXBzYWNrOyAgIC8vIGVtcHR5IHZlY3RvcgogICAgdmVjdG9yPGludD4gaXRlbXMobik7ICAgLy8gdmVjdG9yIHdpdGggbiBlbGVtZW50cwoKICAgIGNvdXQgPDwgIlR5cGUgd2VpZ2h0cy4iOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBjaW4gPj4gaXRlbXNbaV07CiAgICB9OwoKICAgIHByaW50X3NvbHV0aW9ucygwLCBrbmFwc2FjaywgMCwgaXRlbXMsIGxpbWl0KTsgIC8vIG4gbm90IG5lZWRlZAoKICAgIHJldHVybiAwOwoKfQ==