Cod sursa(job #1015467)

Utilizator mvcl3Marian Iacob mvcl3 Data 24 octombrie 2013 18:15:09
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#define in "energii.in"
#define out "energii.out"
#define Max_Size 20004

int G, W, Energie_Totala, Sol = -1, Max_el;
int DP[Max_Size];
struct obj
{
    int _e;
    int _c;
}   P[Max_Size / 2];

inline void Read_Data()
{
    std :: ifstream f(in);
    f >> G >> W;

    for(int i = 1; i <= G; ++i)
    {
        f >> P[i]._e >> P[i]._c;
        Energie_Totala += P[i]._e;
        Max_el = std :: max(Max_el, P[i]._e);
    }
}

inline void Solve()
{
    if(Energie_Totala >= W)
    {
        #define oo 100000
        Sol = oo;

        for(int i = 1; i <= W + Max_el; ++i)    DP[i] = oo;

        for(int i = 1; i <= G; ++i)
            for(int j = W; j >= 0; --j)
                if(DP[j] != oo && DP[j + P[i]._e] > DP[j] + P[i]._c)
                    DP[j + P[i]._e] = DP[j] + P[i]._c;

        for(int i = W; i <= W + Max_el; ++i)    Sol = std :: min(Sol, DP[i]);
    }
}

int main()
{
    Read_Data();
    Solve();

    std :: ofstream g(out);
    g << Sol << '\n';

    g.close();
    return 0;
}