Cod sursa(job #2615796)

Utilizator ecaterinaEcaterina Stefanescu ecaterina Data 15 mai 2020 16:30:37
Problema Energii Scor 5
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>

#define MAXN 5000
#define MAXG 10000

FILE *fin, *fout;

int g[MAXN+1];
int p[MAXN+1];
int v[MAXG+1];
int ant[MAXG+1];

int main() {
    int n, greutate, i, gg, suma;
    fin = fopen("energii.in", "r");
    fout = fopen("energii.out", "w");
    
    fscanf(fin, "%d%d", &n, &greutate);
    
    suma = 0;
    for (i=1; i<=n; i++) {
        fscanf(fin, "%d%d", &g[i], &p[i]);
        suma+=g[i];
    }
    
    if (suma<greutate) {
        fprintf(fout, "%d", -1);
    } else {
    
        for (i=1; i<=n; i++) {
            for (gg=1; gg<=greutate; gg++) {
                v[gg] = ant[gg];
                if (gg>=g[i]) {
                    if (v[gg]<ant[gg-g[i]]+p[i]) {
                        v[gg] = ant[gg-g[i]]+p[i];
                    }
                }
            }
            
            for (gg=1; gg<=greutate; gg++) {
                ant[gg] = v[gg];
            }
        }
        
        gg = greutate;
        if (v[gg]<ant[gg-g[i]]+p[i]) {
            v[gg] = ant[gg-g[i]]+p[i];
        }
        fprintf(fout, "%d\n", v[greutate]);
        
    }
    
    fclose(fin);
    fclose(fout);
    return 0;
}