Cod sursa(job #917344)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 17 martie 2013 17:08:19
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>

using namespace std;

#define Nmax 11000000

unsigned long long G, W, S;
int E[1002], C[1002], cost[Nmax];
bool format[Nmax];
unsigned long long minim = Nmax;

void citire(){

    ifstream f("energii.in");

    f >> G >> W;

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

    f.close();
}

void dinamica(){

    unsigned long long 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];

                if(j+E[i] >= W && cost[j+E[i]] < minim)
                    minim = cost[j+E[i]];
            }

        if(cost[maxim] + C[i] <= minim)
            maxim += E[i];
    }
}

void afis(){

    ofstream g("energii.out");

    //if(W > S)
        g << -1 << "\n";

    //else{
       //     dinamica();
        //    g << (minim == Nmax ? -1 : minim) << "\n";
        //}
}

int main(){

    citire();
    afis();

    return 0;
}