fork download
  1. #include <stdio.h>
  2.  
  3. int coins[5] = { 1, 5, 10, 20, 100 };
  4.  
  5. long long int save[1000001][5];
  6.  
  7. long long int get(int n, int k)
  8. {
  9. if (n < 0 || k < 0) return 0;
  10. if (k == 0)
  11. {
  12. if (n == coins[k]) return 1;
  13. if (n == 0) return 1;
  14. }
  15. else if (n == 0) return 1;
  16.  
  17. if (save[n][k]) return save[n][k];
  18. return (save[n][k] = get(n-coins[k],k) + get(n,k-1));
  19. }
  20.  
  21. int main(int argc, const char * argv[])
  22. {
  23. int n;
  24. scanf("%d",&n);
  25. printf("%d - %lld\n",n,get(n,4));
  26. scanf("%d",&n);
  27. printf("%d - %lld\n",n,get(n,4));
  28. }
  29.  
  30.  
Success #stdin #stdout 0.02s 41112KB
stdin
1000 1000000
stdout
1000 - 543686
1000000 - 416783343416935001