#include <iostream>
#include <string.h>
using namespace std;
int count( int S[], int m, int n )
{
// table[i] will be storing the number of solutions for
// value i. We need n+1 rows as the table is consturcted
// in bottom up manner using the base case (n = 0)
int table[n+1];
// Initialize all table values as 0
memset(table, 0, sizeof(table));
// Base case (If given value is 0)
table[0] = 1;
// Pick all coins one by one and update the table[] values
// after the index greater than or equal to the value of the
// picked coin
for(int i=0; i<m; i++)
for(int j=n; j>=S[i]; j--) // One line change here.
table[j] += table[j-S[i]];
return table[n];
}
int main() {
int coins[] = {2,5,3, 6};
cout << count(coins, 4, 10);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgY291bnQoIGludCBTW10sIGludCBtLCBpbnQgbiApCnsKICAgIC8vIHRhYmxlW2ldIHdpbGwgYmUgc3RvcmluZyB0aGUgbnVtYmVyIG9mIHNvbHV0aW9ucyBmb3IKICAgIC8vIHZhbHVlIGkuIFdlIG5lZWQgbisxIHJvd3MgYXMgdGhlIHRhYmxlIGlzIGNvbnN0dXJjdGVkCiAgICAvLyBpbiBib3R0b20gdXAgbWFubmVyIHVzaW5nIHRoZSBiYXNlIGNhc2UgKG4gPSAwKQogICAgaW50IHRhYmxlW24rMV07CiAKICAgIC8vIEluaXRpYWxpemUgYWxsIHRhYmxlIHZhbHVlcyBhcyAwCiAgICBtZW1zZXQodGFibGUsIDAsIHNpemVvZih0YWJsZSkpOwogCiAgICAvLyBCYXNlIGNhc2UgKElmIGdpdmVuIHZhbHVlIGlzIDApCiAgICB0YWJsZVswXSA9IDE7CiAKICAgIC8vIFBpY2sgYWxsIGNvaW5zIG9uZSBieSBvbmUgYW5kIHVwZGF0ZSB0aGUgdGFibGVbXSB2YWx1ZXMKICAgIC8vIGFmdGVyIHRoZSBpbmRleCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRoZQogICAgLy8gcGlja2VkIGNvaW4KICAgIGZvcihpbnQgaT0wOyBpPG07IGkrKykKICAgICAgICBmb3IoaW50IGo9bjsgaj49U1tpXTsgai0tKSAvLyBPbmUgbGluZSBjaGFuZ2UgaGVyZS4KICAgICAgICAgICAgdGFibGVbal0gKz0gdGFibGVbai1TW2ldXTsKIAogICAgcmV0dXJuIHRhYmxlW25dOwp9CgppbnQgbWFpbigpIHsKCWludCBjb2luc1tdID0gezIsNSwzLCA2fTsKCWNvdXQgPDwgY291bnQoY29pbnMsIDQsIDEwKTsKCXJldHVybiAwOwp9