Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define N_MAX 100
- #define VALUE_MAX 100000
- #define SUM_MAX 100000
- #define MIN(x, y) (((x) < (y)) ? (x) : (y))
- int value[N_MAX], sum[SUM_MAX], oft[VALUE_MAX];
- int main() {
- int n, s, i, j;
- printf("n = "); scanf("%d", &n);
- for (i = 0; i < n; i++) {
- printf("b1 = "); scanf("%d", &value[i]);
- }
- printf("s = "); scanf("%d", &s);
- // solve
- for (i = 1; i <= s; i++) {
- for (j = 0; j < n; j++) {
- if (value[j] == i) sum[i] = 1;
- if (sum[i] != 0 && i + value[j] <= s) {
- if (sum[i+value[j]] == 0) sum[i+value[j]] = sum[i] + 1;
- else sum[i+value[j]] = MIN(sum[i+value[j]], sum[i] + 1);
- }
- }
- }
- printf("Numarul minim de bancnote %d\n", sum[s]);
- while (sum[s] != 1) {
- for (i = 0; i < n; i++) {
- if (sum[s-value[i]] == sum[s] - 1) {
- s = s - value[i];
- oft[value[i]]++;
- break;
- }
- }
- }
- oft[s]++;
- for (i = 1; i < VALUE_MAX; i++) {
- if (oft[i] > 0) printf("bancnota de %d de %d ori\n", i, oft[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement