#include <vector>
#include <string>
#include <iostream>
#include <iomanip>
#include <numeric>
using namespace std;
int Count(const vector<int>& x, int sum)
{
int count = 0;
vector<int> a(x.size(),0);
for(;;)
{
int i = 0;
if (inner_product(x.begin(),x.end(),a.begin(),0) == sum)
{
for(int j = 0; j < x.size(); ++j)
{
for(int k = 0; k < a[j]; ++k)
cout << "+" << x[j];
}
cout << " = " << sum << endl;
++count;
}
do {
if (a[i]*x[i] <= sum)
{
a[i]++;
break;
}
else
{
a[i] = 0;
++i;
}
} while( i < a.size());
if (i == a.size()) break;
};
return count;
}
int main(int argc, const char * argv[])
{
vector<int> x = { 5, 10, 15, 25 };
cout << Count(x,40) << endl;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPG51bWVyaWM+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IENvdW50KGNvbnN0IHZlY3RvcjxpbnQ+JiB4LCBpbnQgc3VtKQp7CiAgICBpbnQgY291bnQgPSAwOwogICAgdmVjdG9yPGludD4gYSh4LnNpemUoKSwwKTsKCiAgICBmb3IoOzspCiAgICB7CiAgICAgICAgaW50IGkgPSAwOwogICAgICAgIGlmIChpbm5lcl9wcm9kdWN0KHguYmVnaW4oKSx4LmVuZCgpLGEuYmVnaW4oKSwwKSA9PSBzdW0pCiAgICAgICAgewogICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgeC5zaXplKCk7ICsraikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yKGludCBrID0gMDsgayA8IGFbal07ICsraykKICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICIrIiA8PCB4W2pdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdXQgPDwgIiA9ICIgPDwgc3VtIDw8IGVuZGw7CiAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgfQogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGFbaV0qeFtpXSA8PSBzdW0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFbaV0rKzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYVtpXSA9IDA7CiAgICAgICAgICAgICAgICArK2k7CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlKCBpIDwgYS5zaXplKCkpOwogICAgICAgIGlmIChpID09IGEuc2l6ZSgpKSBicmVhazsKICAgIH07CiAgICByZXR1cm4gY291bnQ7Cn0KCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CiAgICB2ZWN0b3I8aW50PiB4ID0geyA1LCAxMCwgMTUsIDI1IH07CiAgICBjb3V0IDw8IENvdW50KHgsNDApIDw8IGVuZGw7Cn0KCg==