Cod sursa(job #1230574)

Utilizator borcanirobertBorcani Robert borcanirobert Data 18 septembrie 2014 16:27:16
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
using namespace std;

ifstream fin( "energii.in" );
ofstream fout( "energii.out" );

const int MAXG = 1010;
const int MAXW = 10010;
const int INF = 0x3f3f3f3f;
int G[MAXG];
int E[MAXG];
int NG, W;
bool ok[MAXW];
int c[MAXW];
int maxim;
int minim = INF;

int main()
{
    int i, j;

    for ( i = 1; i < MAXW; i++ )
        c[i] = INF;

    fin >> NG >> W;
    for ( i = 1; i <= NG; i++ )
        fin >> G[i] >> E[i];

    ok[0] = true;
    for ( i = 1; i <= NG; i++ )
        for ( j = maxim; j >= 0; j-- )
            if ( ok[j] && ( c[j + G[i]] > c[j] + E[i] ) )
            {
                ok[j + G[i]] = true;
                c[j + G[i]] = c[j] + E[i];

                if ( j + G[i] < W && j + G[i] > maxim )
                    maxim = j + G[i];
                if ( j + G[i] >= W && c[j + G[i]] < minim )
                    minim = c[j + G[i]];
            }
    if ( minim != INF )
        fout << minim << '\n';
    else
        fout << "-1\n";

    fin.close();
    fout.close();
    return 0;
}