Cod sursa(job #3262361)

Utilizator pofianFilipp pofian Data 9 decembrie 2024 20:59:54
Problema Ghiozdan Scor 54
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>

#define MAX(a, b) (a > b ? a : b)
#define MIN(a, b) (a < b ? a : b)

int v[75000 + 5];
int wh[20000 + 5];

int main()
{
    FILE *in = fopen("ghiozdan.in", "r");

    int n, g;
    fscanf(in, "%d%d", &n, &g);
    int max = 0;
    for (int i = 0; i < n; i++) {
        fscanf(in, "%d", &wh[i]);
        for (int j = max; j >= 0; j--)
            if (v[j] != 0) {
                int s = wh[i] + j;
                if (s <= g) {
                    if (v[s] == 0)
                        v[s] = 1 + v[j];
                    else
                        v[s] = MIN(v[s], 1 + v[j]);
                    max = MAX(max, s);
                }
            }

        v[wh[i]] = 1;
        max = MAX(max, wh[i]);
    }
    fclose(in);

    int sol = g;
    while(sol >= 0 && v[sol] == 0)
        sol--;

    FILE *out = fopen("ghiozdan.out", "w");
    fprintf(out, "%d %d\n", sol, v[sol]);
    fclose(out);
}