Cod sursa(job #3262538)

Utilizator pofianFilipp pofian Data 10 decembrie 2024 17:22:47
Problema Ghiozdan Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 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 vs[75000 + 5];
int gfr[200 + 5];

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

    int n, g;
    fscanf(in, "%d%d", &n, &g);
    int max = 0, gr;
    for (int i = 0; i < n; i++) {
        fscanf(in, "%d", &gr);
        gfr[gr]++;
    }
    fclose(in);

    for (int i = 200; i > 0; i--) 
        for (int fr = gfr[i]; fr > 0 ; fr--) {
            for (int j = MIN(max, g - i); j >= 0; j--)
                if (v[j] != 0 || j == 0) {
                    int s = i + j;
                    if (v[s] == 0) {
                        v[s] = 1 + v[j];
                        vs[s] = i;
                    }
                    max = MAX(max, s);
                }
        }

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

    FILE *out = fopen("ghiozdan.out", "w");
    fprintf(out, "%d %d\n", g, v[g]);
    for (; g > 0; g -= vs[g])
        fprintf(out, "%d\n", vs[g]);
    fclose(out);
}