fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int N, K, koin[505];
  5. int memo[50005];
  6.  
  7. int topdown(int total) {
  8. if(total == 0)
  9. return 0;
  10. if(memo[total] != -1)
  11. return memo[total];
  12. int best = 1e9; // 1.234e9 = 1.234*10^9
  13. for(int i = 0; i < N; i++)
  14. if(total >= koin[i])
  15. best = min(best, topdown(total-koin[i])+1);
  16. return memo[total] = best;
  17. }
  18.  
  19. int main() {
  20. cin >> N;
  21. for(int i = 0; i < N; i++)
  22. cin >> koin[i];
  23. cin >> K;
  24. memset(memo, -1, sizeof(memo));
  25.  
  26. // top-down
  27. // cout << topdown(K) << endl;
  28.  
  29. // bottom-up
  30. memo[0] = 0;
  31. for(int i = 1; i <= K; i++) {
  32. int best = 1e9;
  33. for(int j = 0; j < N; j++)
  34. if(i >= koin[j])
  35. best = min(best, memo[i-koin[j]]+1);
  36. memo[i] = best;
  37. }
  38. cout << memo[K] << endl;
  39. return 0;
  40. }
Success #stdin #stdout 0.01s 5304KB
stdin
4
1 2 5 6
10
stdout
2