Cod sursa(job #880500)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 16 februarie 2013 20:45:41
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include <fstream>

using namespace std;

#define Nmax 1000002

int G, W;
int E[Nmax], C[Nmax], cost[Nmax];
bool format[Nmax];

void citire(){

    ifstream f("energii.in");

    f >> G >> W;

    for(int i = 1; i <= G; i++)
        f >> E[i] >> C[i];

    f.close();
}

void dinamica(){

    int maxim = 0;
    format[0] = 1;

    for(int i = 1; i <= G; i++){

        for(int j = maxim; j >= 0; j--)
            if(format[j]){

                format[j+E[i]] = 1;

                if(cost[j] + C[i] < cost[j+E[i]] || cost[j+E[i]] == 0)
                    cost[j+E[i]] = cost[j] + C[i];
            }

        maxim += E[i];
    }
}

void afis(){

    ofstream g("energii.out");

    int maxim = Nmax*Nmax;

    for(int i = W; i <= Nmax; i++)
        if(format[i])
            maxim = min(maxim, cost[i]);

    g << (maxim == Nmax ? -1 : maxim) << "\n";
}

int main(){

    citire();
    dinamica();
    afis();

    return 0;
}