Pagini recente » Cod sursa (job #811017) | Cod sursa (job #1015922) | Cod sursa (job #1957173) | Cod sursa (job #2117110) | Cod sursa (job #2232500)
#pragma once
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
#define NRG 1001
#define Necesar 5001
int min(int a, int b) {
if (a == 0)
return b;
if (b == 0)
return a;
if (a < b)
return a;
return b;
}
int energieGenerata[NRG], cost[NRG], lCurent[Necesar], lPrecedent[Necesar];
int main() {
int nrGen, Energie, Emax = 0;
fin >> nrGen >> Energie;
for (int i = 1; i <= nrGen; i++)
fin >> energieGenerata[i] >> cost[i];
for (int j = 0; j <= Energie; j++)
lPrecedent[j] = lCurent[j] = 0;
for (int i = 1; i <= nrGen; i++)
{
Emax += energieGenerata[i];
for (int j = 0; j <= Energie; j++) {
if (Emax < j) {
lCurent[j] = 0;
}
else {
if (energieGenerata[i] >= j)
lCurent[j] = min(lPrecedent[j], cost[i]);
else
lCurent[j] = min(lPrecedent[j], lPrecedent[j - energieGenerata[i]] + cost[i]);
}
}
for (int j = 0; j <= Energie; j++)
lPrecedent[j] = lCurent[j];
}
if (lCurent[Energie] != 0)
fout << lCurent[Energie]; // costul minim de produs Energie avand la dispozitie toate elementele;
else
fout << -1;
return 0;
}