Cod sursa(job #1667642)

Utilizator EberardoVladianu Cosmin Eberardo Data 29 martie 2016 08:46:03
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>

using namespace std;

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

int minim(const int x, const int y)
{
    if(x>y)
        return x;
    return y;
}

struct generator
{
    int energie,cost;

};

generator generatoare[1005];
int optim[5005];

int g,w,nr;
int min_cautat=999999999;

bool ok;

void citire()
{
    int i,e,c;
    fin>>g>>w;
    for(i=1;i<=g;i++)
    {
        fin>>e>>c;
        if(e>w)
        {
            if(c<min_cautat)
            {
                ok=true;
                min_cautat=c;
            }
        }
        else
        {
            generatoare[++nr].energie=e;
            generatoare[nr].cost=c;
        }
    }
}

void dinamica()
{
    int i,j;
    for(i=1;i<=nr;i++)
    {
        int e=generatoare[i].energie;
        int c=generatoare[i].cost;
        for(j=w;j>=e;j--)
        {
            optim[j]=minim(optim[j],optim[j-e]+c);
        }
        for(j;j>0;j--)
            optim[j]=minim(optim[j],optim[j-1]);
    }
}

int main()
{
    citire();
    dinamica();
    if(optim[w]<min_cautat)
    {
        ok=true;
        min_cautat=optim[w];
    }
    if(ok==false)
        fout<<-1;
    else
        fout<<min_cautat;
    return 0;
}