Cod sursa(job #3199889)

Utilizator RichardChessBibire David-Alexandru RichardChess Data 2 februarie 2024 19:33:57
Problema Energii Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.59 kb
/*#include <iostream>
#include <fstream>
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");

const int max_G = 1001;
const int max_W = 5001;
const int bigNumber = 1e9;
int c_eng[max_W];
int EG[max_G];
int CG[max_G];

int main() {

    int G, W;
    f>>G>>W;

    for (int i = 0; i < G; i++) {
        f >> EG[i];
        f >> CG[i];
    }

    for (int i = 0; i <= W; i++) {
        c_eng[i] = bigNumber;
    }
    c_eng[0] = 0;

    for (int i = 0; i < G; i++) {
        for (int j = EG[i]; j <= W; j++) {
            if (c_eng[j - EG[i]] + CG[i] < c_eng[j]) {
                c_eng[j] = c_eng[j - EG[i]] + CG[i];
            }
        }
    }

    if (c_eng[W] != bigNumber) {
        g << c_eng[W];
    }
    else {
        g << "-1";
    }

    return 0;
}
 */
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("energii.in");
ofstream g("energii.out");

const int max_G = 1001;
const int max_W = 5001;
const int bigNumber = 1e9;
int c_eng[max_W];
int EG[max_G];
int CG[max_G];

int main() {
    int G, W;
    f >> G >> W;

    for (int i = 0; i < G; i++) {
        f >> EG[i] >> CG[i];
    }

    for (int i = 0; i <= W; i++) {
        c_eng[i] = bigNumber;
    }
    c_eng[0] = 0;

    for (int i = 0; i < G; i++) {
        for (int j = W; j >= EG[i]; j--) {
            if (c_eng[j - EG[i]] != bigNumber && c_eng[j - EG[i]] + CG[i] < c_eng[j]) {
                c_eng[j] = c_eng[j - EG[i]] + CG[i];
            }
        }
    }

    if (c_eng[W] != bigNumber) {
        g << c_eng[W];
    }
    else {
        g << "-1";
    }

    f.close();
    g.close();

    return 0;
}