#include #include using namespace std; int values[] = { 1, 5, 10, 25 }; int ways(int amount, int last_usable) { if (amount == 0) return 1; // the result is the empty set of coins, that's still a valid solution if (last_usable < 0) return 0; if (amount < values[last_usable]) // can't use that coin at all, it is too big return ways(amount, last_usable - 1); int n1 = ways(amount - values[last_usable], last_usable); int n2 = ways(amount, last_usable - 1); return n1 + n2; } int main(int argc, char * argv[]) { cout << ways(atoi(argv[1]), 3) << "\n"; }