// Iterative C++ program to print sums of all
// possible subsets.
#include<bits/stdc++.h>
using namespace std;
// Prints sums of all subsets of array
void subsetSums(int arr[], int n)
{
vector<int> a;
int i=0;
// There are totoal 2^n subsets
long long total = 1<<n;
// Consider all numbers from 0 to 2^n - 1
for (long long i=0; i<total; i++)
{
long long sum =0;
// Consider binary reprsentation of
// current i to decide which elements
// to pick.
for (int j=1; j<n; j++)
if (i & (1<<j))
sum += arr[j];
// Print sum of picked elements.
a.push_back(sum);
}
for(auto it=a.begin();it!=a.end();it++)
cout << *it<< " ";
}
// Driver code
int main()
{
int arr[] = {5, 4, 3};
int n = sizeof(arr)/sizeof(arr[0]);
subsetSums(arr, n);
return 0;
}
Ly8gSXRlcmF0aXZlIEMrKyBwcm9ncmFtIHRvIHByaW50IHN1bXMgb2YgYWxsIAovLyBwb3NzaWJsZSBzdWJzZXRzLiAKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4gCnVzaW5nIG5hbWVzcGFjZSBzdGQ7IAoKLy8gUHJpbnRzIHN1bXMgb2YgYWxsIHN1YnNldHMgb2YgYXJyYXkgCnZvaWQgc3Vic2V0U3VtcyhpbnQgYXJyW10sIGludCBuKSAKeyAKCXZlY3RvcjxpbnQ+IGE7CglpbnQgaT0wOwoJLy8gVGhlcmUgYXJlIHRvdG9hbCAyXm4gc3Vic2V0cyAKCWxvbmcgbG9uZyB0b3RhbCA9IDE8PG47IAoKCS8vIENvbnNpZGVyIGFsbCBudW1iZXJzIGZyb20gMCB0byAyXm4gLSAxIAoJZm9yIChsb25nIGxvbmcgaT0wOyBpPHRvdGFsOyBpKyspIAoJeyAKCQlsb25nIGxvbmcgc3VtID0wOyAKCgkJLy8gQ29uc2lkZXIgYmluYXJ5IHJlcHJzZW50YXRpb24gb2YgCgkJLy8gY3VycmVudCBpIHRvIGRlY2lkZSB3aGljaCBlbGVtZW50cyAKCQkvLyB0byBwaWNrLiAKCQlmb3IgKGludCBqPTE7IGo8bjsgaisrKSAKCQkJaWYgKGkgJiAoMTw8aikpIAoJCQkJc3VtICs9IGFycltqXTsgCgoJCS8vIFByaW50IHN1bSBvZiBwaWNrZWQgZWxlbWVudHMuIAoJCWEucHVzaF9iYWNrKHN1bSk7Cgl9IAoJZm9yKGF1dG8gaXQ9YS5iZWdpbigpO2l0IT1hLmVuZCgpO2l0KyspCgljb3V0IDw8ICppdDw8ICIgIjsKfSAKCi8vIERyaXZlciBjb2RlIAppbnQgbWFpbigpIAp7IAoJaW50IGFycltdID0gezUsIDQsIDN9OyAKCWludCBuID0gc2l6ZW9mKGFycikvc2l6ZW9mKGFyclswXSk7IAoKCXN1YnNldFN1bXMoYXJyLCBuKTsgCglyZXR1cm4gMDsgCn0gCg==