Cod sursa(job #1277430)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 27 noiembrie 2014 17:29:57
Problema Energii Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <stdio.h>
#define NMAX 5001
FILE *fin, *fout;
int n, k, *v1, *v2, sum, temp;
bool f;
struct generator
{
       int energie;
       int cost;
} *input;
int max(int a, int b)
{
    return (a > b)?a:b;
}
int main()
{
    fin = fopen("energii.in", "r");
    fout = fopen("energii.out", "w");
    fscanf(fin, "%d%d", &n, &k);
    input = new generator[n+3];
    for(int i = 0; i< n; i++)
    {
            fscanf(fin, "%d%d", &input[i+1].energie, &input[i+1].cost);
            sum+=input[i+1].cost;
    }
    v1 = new int[NMAX+1];
    v2 = new int[NMAX+1];
    v2[0] = 0;
    for(int i = 0; i<= NMAX; i++) v1[i] = 0;
    for(int i = 1; i<= n; i++)
    {
            for(int j = 1; j<=NMAX; j++)
            {
                    if(input[i].cost > j) {v2[j] = v1[j];continue;}
                    v2[j] = max(v1[j], v1[j- input[i].cost] + input[i].energie);
            }
            for(int j = 1; j<=NMAX; j++) v1[j] = v2[j];
    }
    for(int i = 1; i<= NMAX; i++)
    {
            if(v1[i] >= k) {fprintf(fout, "%d\n", i);f = 1;break;}
    }
    if(!f) fprintf(fout, "-1\n");
    fclose(fin);
    fclose(fout);
    return 0;
}
/*
15
100
11 12
15 17
13 18
11 17
9 13
13 8
9 6
18 2
20 6
8 10
16 17
11 10
12 8
19 17
2 7
*/