Cod sursa(job #1589987)

Utilizator PraetorGrigorosoaia Florin Praetor Data 4 februarie 2016 16:58:05
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#define NMG 1005 // numarul maxim de generatoare
#define ENM 5005 // energia necesara maxima
#define INF 10002

using namespace std;

FILE*in;
ofstream out("energii.out");

int nr_generatoare;
int energie_necesara;
int energie[NMG];
int cost[NMG];
int SOL[NMG][ENM];

void read()
{
    in=fopen("energii.in", "r");

    fscanf(in, "%d%d", &nr_generatoare, &energie_necesara);
    for (int i=1; i<=nr_generatoare; i++)
        fscanf(in, "%d%d", &energie[i], &cost[i]);
}

void build_SOL()
{
    for (int i=0; i<=nr_generatoare; i++)
        for (int j=1; j<=energie_necesara; j++)
            SOL[i][j]=INF;
}

void find_SOL()
{
    for (int i=1; i<=nr_generatoare; i++)
        for (int j=1; j<=energie_necesara; j++)
        {
            if (j >= energie[i])
                SOL[i][j]=min(SOL[i-1][j], SOL[i-1][j-energie[i]]+cost[i]);
            else
                SOL[i][j]=min(SOL[i-1][j], cost[i]);
        }
}

void show()
{
    if (SOL[nr_generatoare][energie_necesara] == INF)
        out<<-1;
    else
        out<<SOL[nr_generatoare][energie_necesara];
}

int main()
{
    read();
    build_SOL();
    find_SOL();
    show();

    return 0;
}