Advertisement
Mirandek

Untitled

Jul 29th, 2015
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.81 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int coins[100];
  5. int n;
  6. int impossible = 10000;
  7. int dp[1000];
  8.  
  9. int decompose(int s) {
  10.     if (dp[s] != -1)
  11.         return dp[s];
  12.  
  13.     if (s == 0)
  14.         return 0;
  15.  
  16.     int best = impossible;
  17.     if (s < coins[n-1]) {
  18.         dp[s] = impossible;
  19.         return impossible;
  20.     }
  21.  
  22.     for (int i = 0; i < n; i++) {
  23.         if (s >= coins[i]) {
  24.             int res = decompose(s - coins[i]) + 1;
  25.             if (res < best)
  26.                 best = res;
  27.         }
  28.     }
  29.     dp[s] = best;
  30.     return best;
  31. }
  32.  
  33. int main() {
  34.     int s;
  35.     memset(dp, -1, sizeof(dp));
  36.     scanf("%d %d", &s, &n);
  37.     for (int i = 0; i < n; i++)
  38.         scanf("%d", &coins[i]);
  39.  
  40.     int result = decompose(s);
  41.     printf("%d", (result == impossible)?-1:result);
  42.     return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement