Guest User

Untitled

a guest
Feb 20th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int coins[] = {5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000};
  4.  
  5. long long brain[30002][11] = {0};
  6.  
  7. long long solve(int n, int bound)
  8. {
  9. if (n < 10) return 1;
  10. else {
  11. long long ways = 0, i;
  12.  
  13. for (i = bound; i >= 0; i--) {
  14. if (n >= coins[i]) {
  15. if (brain[n-coins[i]][i] != 0) {
  16. ways += brain[n-coins[i]][i];
  17. } else {
  18. long long w = solve(n - coins[i], i);
  19. ways += w;
  20. brain[n-coins[i]][i] = w;
  21. }
  22. }
  23. }
  24.  
  25. return ways;
  26. }
  27. }
  28.  
  29. int main()
  30. {
  31. int n, i;
  32. long long ways = 0;
  33.  
  34. scanf("%d", &n);
  35. for (i = 11; i >= 0; i--) {
  36. if (n >= coins[i]) {
  37. if (brain[n-coins[i]][i] != 0) {
  38. ways += brain[n-coins[i]][i];
  39. } else {
  40. long long w = solve(n - coins[i], i);
  41. ways += w;
  42. brain[n-coins[i]][i] = w;
  43. }
  44. }
  45. }
  46. printf("%lld\n", ways);
  47.  
  48. return 0;
  49. }
Add Comment
Please, Sign In to add comment