Cod sursa(job #1520215)

Utilizator icepinPredi Dragos icepin Data 8 noiembrie 2015 15:10:36
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <cstring>
#include <climits>
#include <fstream>

struct obj {

    int val, weight;
};

using namespace std;

ifstream f("energii.in");
ofstream g("energii.out");

#define GMax 1000005
#define INF 0x3f3f3f3
#define min(a,b) ((a<b)?(a):(b))

int E[GMax];
int C[GMax];
int A[GMax];
int n,necessaryE;
long long sum=0;
long long minim = 0;

void knapstack() {

    for (int i=1;i<=GMax-1;i++) {
        A[i] = INF;
    }

    for (int i=1;i<=n;i++) {
        for (int j=necessaryE; j>= 0;j--) {
            if (A[j] != INF) {
                if (A[j] + C[i] < A[j+E[i]])
                    A[j+E[i]] = A[j] + C[i];
            }
        }
    }

    minim = INF;
    for (long long i=necessaryE; i<= sum;i++)
        minim = min(minim, A[i]);
}

int main() {

    f>>n>>necessaryE;
    for (int i=1;i<=n;i++) {
        f>>E[i]>>C[i];
        sum+=E[i];
    }
    f.close();

    if (sum < necessaryE)
        g<<-1<<'\n';
    else {
        knapstack();
        g<<minim<<'\n';
    }

    g.close();

    return 0;
}