Cod sursa(job #2515465)

Utilizator popescu_adrian17Popescu Adrian popescu_adrian17 Data 28 decembrie 2019 17:14:45
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
using namespace std;

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

const int nu = 1<<30;

int cmin[1001][5001]; //cmin[i][j] = costul minim pentru a obtine j watti cu <=i generatoare

int main()
{
    int n, i, j, E, e[1001], c[1001], se, icmin;
    c[0] = nu;
    icmin = 0;
    se = 0;
    fin >> n >> E;
    for (i = 1; i<=n; i++)
    {
        fin >> e[i] >> c[i];
        se = se + e[i];
        if (c[i] < c[icmin])
            icmin = i;
    }
    if (se < E)
    {
        fout << -1;
        return 0;
    }
    for (i = 0; i<=E; i++)
        cmin[0][i] = nu;
    for (i = 1; i<=min(e[1], E); i++)
        cmin[1][i] = c[1];
    for (i = icmin; i<=n; i++)
        for (j = 1; j<=min(e[icmin], E); j++)
            cmin[i][j] = c[icmin];
    for (i = 1; i<=n; i++)
    {
        j = 1;
        while (cmin[i][j] != 0)
            j++;
        for (;j<=E; j++)
        {
            cmin[i][j] = cmin[i-1][j];
            if (j<=e[i])
                cmin[i][j] = min(cmin[i][j], c[i]);
            if (j>=e[i])
                cmin[i][j] = min(cmin[i-1][j], cmin[i-1][j-e[i]]+c[i]);
        }
    }
    fout << cmin[n][E];
    return 0;
}