Advertisement
Guest User

Untitled

a guest
Nov 6th, 2013
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #define N_MAX 100
  4. #define VALUE_MAX 100000
  5. #define SUM_MAX 100000
  6. #define MIN(x, y) (((x) < (y)) ? (x) : (y))
  7.  
  8. int value[N_MAX], sum[SUM_MAX], oft[VALUE_MAX];
  9.  
  10. int main() {
  11. int n, s, i, j;
  12. printf("n = "); scanf("%d", &n);
  13. for (i = 0; i < n; i++) {
  14. printf("b1 = "); scanf("%d", &value[i]);
  15. }
  16. printf("s = "); scanf("%d", &s);
  17.  
  18. // solve
  19. for (i = 1; i <= s; i++) {
  20. for (j = 0; j < n; j++) {
  21. if (value[j] == i) sum[i] = 1;
  22. if (sum[i] != 0 && i + value[j] <= s) {
  23. if (sum[i+value[j]] == 0) sum[i+value[j]] = sum[i] + 1;
  24. else sum[i+value[j]] = MIN(sum[i+value[j]], sum[i] + 1);
  25. }
  26. }
  27. }
  28.  
  29. printf("Numarul minim de bancnote %d\n", sum[s]);
  30.  
  31. while (sum[s] != 1) {
  32. for (i = 0; i < n; i++) {
  33. if (sum[s-value[i]] == sum[s] - 1) {
  34. s = s - value[i];
  35. oft[value[i]]++;
  36. break;
  37. }
  38. }
  39. }
  40. oft[s]++;
  41. for (i = 1; i < VALUE_MAX; i++) {
  42. if (oft[i] > 0) printf("bancnota de %d de %d ori\n", i, oft[i]);
  43. }
  44. return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement