Cod sursa(job #3149937)

Utilizator andreea678Rusu Andreea-Cristina andreea678 Data 13 septembrie 2023 19:22:25
Problema Energii Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
//G - numarul de generatoare
//W - cantitatea de energie necesara
//EG - cantitatea de energie produsa de generator
//CG - costul necesar producerii
int G, W, EG[1005], CG[1005];
int d[2][5005];
void citire() {
    fin >> G >> W;
    for (int i=1; i<=G; ++i) {
        fin >> EG[i] >> CG[i];
    }
}
int main()
{
    citire();
    for (int j=0; j<=W; ++j) {
        d[0][j]=CG[1];
        if (j>EG[1]) {
            d[0][j]=999999;
        }
    }
    for (int i=2; i<=G; ++i) {
        for (int j=EG[i]; j<=W; ++j) {
            d[1][j]=min(CG[i]+d[0][j-EG[i]], d[0][j]);
        }
        int last=-1;
        for (int k=W; k>=0; k--) {
            if (d[1][k]==999999) {
                if (last!=-1) {
                    d[1][k]=last;
                }
            }
            else {
                last=d[1][k];
            }
        }
        for (int j=0; j<=W; ++j) {
            d[0][j]=d[1][j];
            //cout << d[1][j] << ' ';
        }
        //cout <<'\n';
    }
    if (d[1][W]==999999) {
        fout << -1;
    }
    else {
        fout << d[1][W];
    }
    return 0;
}