Pagini recente » Cod sursa (job #2024348) | Istoria paginii runda/test_concurs | Istoria paginii runda/my_cex | Atasamentele paginii Clasament pregatire_pt_oji | Cod sursa (job #1603090)
#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';
}
}