Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- int coins[] = {5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000};
- long long brain[30002][11] = {0};
- long long solve(int n, int bound)
- {
- if (n < 10) return 1;
- else {
- long long ways = 0, i;
- for (i = bound; i >= 0; i--) {
- if (n >= coins[i]) {
- if (brain[n-coins[i]][i] != 0) {
- ways += brain[n-coins[i]][i];
- } else {
- long long w = solve(n - coins[i], i);
- ways += w;
- brain[n-coins[i]][i] = w;
- }
- }
- }
- return ways;
- }
- }
- int main()
- {
- int n, i;
- long long ways = 0;
- scanf("%d", &n);
- for (i = 11; i >= 0; i--) {
- if (n >= coins[i]) {
- if (brain[n-coins[i]][i] != 0) {
- ways += brain[n-coins[i]][i];
- } else {
- long long w = solve(n - coins[i], i);
- ways += w;
- brain[n-coins[i]][i] = w;
- }
- }
- }
- printf("%lld\n", ways);
- return 0;
- }
Add Comment
Please, Sign In to add comment