Cod sursa(job #1049327)

Utilizator robert.iacobIacob Robert robert.iacob Data 7 decembrie 2013 10:57:44
Problema Energii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>

using namespace std;

int G,W,E[10005],C[10005],energie;
int a[1099][5099],minim=2000000000;

void Citire()
{
    int i;
    ifstream fin("energii.in");
    fin>>G>>W;
    for(i=1;i<=G;i++)
    {
        fin>>E[i]>>C[i];
        energie+=E[i];
    }
    fin.close();
}

void Rezolvare()
{
    //a[i][j]=costul minim obtinerii energiei j selectand o submultime a primelor i generatoare;
    //a[i][j]=min(a[i-1][j], a[i-1][j - E[i]] + C[i]);

    int i,j;

    for(i=1;i<=G;i++)
        for(j=1;j<=5009;j++)
            a[i][j]=2000000000;
    a[1][E[1]]=C[1];

    for(i=2;i<=G;i++)
        for(j=1;j<=5001;j++)
            if(E[i]<=j)
                a[i][j]=min(a[i-1][j], a[i-1][j - E[i]] + C[i]);
}

void Afisare()
{
    ofstream fout("energii.out");
    if(energie<W) fout<<"-1\n";
    else
    {
        Rezolvare();
        for(int i=W;i<=5001;i++)
            minim=min(minim,a[G][i]);
        fout<<minim<<"\n";
    }
    fout.close();
}

int main()
{
    Citire();
    Afisare();
    return 0;
}