#include <stdio.h>
int coins[5] = { 1, 5, 10, 20, 100 };
long long int save[1000001][5];
long long int get(int n, int k)
{
if (n < 0 || k < 0) return 0;
if (k == 0)
{
if (n == coins[k]) return 1;
if (n == 0) return 1;
}
else if (n == 0) return 1;
if (save[n][k]) return save[n][k];
return (save[n][k] = get(n-coins[k],k) + get(n,k-1));
}
int main(int argc, const char * argv[])
{
int n;
printf("%d - %lld\n",n
,get
(n
,4)); printf("%d - %lld\n",n
,get
(n
,4)); }
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgY29pbnNbNV0gPSB7IDEsIDUsIDEwLCAyMCwgMTAwIH07Cgpsb25nIGxvbmcgaW50IHNhdmVbMTAwMDAwMV1bNV07Cgpsb25nIGxvbmcgaW50IGdldChpbnQgbiwgaW50IGspCnsKICAgIGlmIChuIDwgMCB8fCBrIDwgMCkgcmV0dXJuIDA7CiAgICBpZiAoayA9PSAwKQogICAgewogICAgICAgIGlmIChuID09IGNvaW5zW2tdKSByZXR1cm4gMTsKICAgICAgICBpZiAobiA9PSAwKSByZXR1cm4gMTsKICAgIH0KICAgIGVsc2UgaWYgKG4gPT0gMCkgcmV0dXJuIDE7CgogICAgaWYgKHNhdmVbbl1ba10pIHJldHVybiBzYXZlW25dW2tdOwogICAgcmV0dXJuIChzYXZlW25dW2tdID0gZ2V0KG4tY29pbnNba10saykgKyBnZXQobixrLTEpKTsKfQogCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CiAgICBpbnQgbjsKICAgIHNjYW5mKCIlZCIsJm4pOwogICAgcHJpbnRmKCIlZCAtICVsbGRcbiIsbixnZXQobiw0KSk7CiAgICBzY2FuZigiJWQiLCZuKTsKICAgIHByaW50ZigiJWQgLSAlbGxkXG4iLG4sZ2V0KG4sNCkpOwp9Cgo=