Cod sursa(job #1783969)

Utilizator preda.andreiPreda Andrei preda.andrei Data 19 octombrie 2016 17:28:04
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <vector>

using namespace std;

const int kInfinit = (1 << 30);

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

    int n, necesar;
    fin >> n >> necesar;

    vector<int> cost_min(necesar + 1, kInfinit);
    cost_min[0] = 0;

    int smax = 0;
    while (n--) {
        int energie, cost;
        fin >> energie >> cost;

        for (int i = smax; i >= 0; --i) {
            if (cost_min[i] != kInfinit) {
                int energie_final = min(i + energie, necesar);
                if (cost_min[i] + cost < cost_min[energie_final]) {
                    cost_min[energie_final] = cost_min[i] + cost;
                    smax = max(smax, energie_final);
                }
            }
        }
    }

    if (cost_min.back() == kInfinit)
        cost_min.back() = -1;
    fout << cost_min.back() << "\n";

    return 0;
}