#include <iostream>
#include <vector>
using namespace std;
int helper(int target, vector<int>& coins, vector<int>& cache, int min) {
if(target < 0) return 0;
if(target == 0) return 1;
//if(cache[target] != 0) return cache[target];
//cout << min << endl;
for(auto& c : coins) {
if(target >= c && min <= c) {
cout << min << " " << c << " " << target << endl;
cache[target] += helper(target-c, coins, cache, c) ;
//cout << cache[target] << endl;
}
}
return cache[target];
}
int main() {
// your code goes here
vector<int> coins{2, 3};
//cout << coins.size();
int target = 7;
vector<int> cache(target+1, 0);
cache[0] = 1;
cache [7] = helper(target, coins, cache, 1);
for (auto& x : cache) cout << x << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGhlbHBlcihpbnQgdGFyZ2V0LCB2ZWN0b3I8aW50PiYgY29pbnMsIHZlY3RvcjxpbnQ+JiBjYWNoZSwgaW50IG1pbikgewoJaWYodGFyZ2V0IDwgMCkgcmV0dXJuIDA7CglpZih0YXJnZXQgPT0gMCkgcmV0dXJuIDE7CgkvL2lmKGNhY2hlW3RhcmdldF0gIT0gMCkgcmV0dXJuIGNhY2hlW3RhcmdldF07CgkvL2NvdXQgPDwgbWluIDw8IGVuZGw7Cglmb3IoYXV0byYgYyA6IGNvaW5zKSB7CgkJaWYodGFyZ2V0ID49IGMgJiYgbWluIDw9IGMpIHsKCQkJY291dCA8PCBtaW4gPDwgIiAiIDw8IGMgPDwgIiAiIDw8IHRhcmdldCA8PCBlbmRsOwoJCQljYWNoZVt0YXJnZXRdICs9IGhlbHBlcih0YXJnZXQtYywgY29pbnMsIGNhY2hlLCBjKSA7CgkJCS8vY291dCA8PCBjYWNoZVt0YXJnZXRdIDw8IGVuZGw7CQkJCgkJfQoJCQkKCX0KCQoJcmV0dXJuIGNhY2hlW3RhcmdldF07CgkKfQoKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJdmVjdG9yPGludD4gY29pbnN7MiwgM307CgkvL2NvdXQgPDwgY29pbnMuc2l6ZSgpOwoJaW50IHRhcmdldCA9IDc7Cgl2ZWN0b3I8aW50PiBjYWNoZSh0YXJnZXQrMSwgMCk7CgljYWNoZVswXSA9IDE7CgljYWNoZSBbN10gPSBoZWxwZXIodGFyZ2V0LCBjb2lucywgY2FjaGUsIDEpOwoJCglmb3IgKGF1dG8mIHggOiBjYWNoZSkgY291dCA8PCB4IDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==