Cod sursa(job #1603090)

Utilizator iulian_f2kGuraliuc Iulian iulian_f2k Data 17 februarie 2016 10:19:59
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <fstream>
#include <utility>
#include <vector>
#define cc first
#define ee second
using namespace std;
vector<pair<int, int> > G;
int nrGen, eNec, energ, cost, pMax, eMax, ok, cmin = 2000000000;

int main()
{
    freopen("energii.in", "rt", stdin);
    freopen("energii.out", "wt", stdout);
    scanf("%d%d", &nrGen, &eNec);
    G.push_back(make_pair(0, 0));
    for(int i=1; i<=nrGen; ++i)
    {
        scanf("%d\n%d", &energ, &cost);
        G.push_back(make_pair(cost, energ));
        eMax += energ;
    }
    if(eMax < eNec)
        cout<<-1<<'\n';
    else
    {
        vector<int>C(eNec+2, -1);
        C[0] = 0;
        for(int g=1; g<=nrGen; ++g)
        {
            for(int e=eNec+G[g].ee; e>=G[g].ee ; --e)
            {
                if(C[e - G[g].ee] > -1)
                {
                    if(e<eNec)
                    {
                        if(C[e]> C[e - G[g].ee] + G[g].cc || C[e] == -1)
                            C[e] = C[e - G[g].ee] + G[g].cc;
                    }
                    else
                        if( (C[eNec] > C[e-G[g].ee] + G[g].cc) || C[eNec] == -1)
                            C[eNec] = C[e-G[g].ee] + G[g].cc;
                }
            }
        }
        cout<<C[eNec]<<'\n';
    }
}