Pagini recente » Cod sursa (job #2573856) | Cod sursa (job #2150437) | Cod sursa (job #341831) | Cod sursa (job #2613612) | Cod sursa (job #1589987)
#include<fstream>
#define NMG 1005 // numarul maxim de generatoare
#define ENM 5005 // energia necesara maxima
#define INF 10002
using namespace std;
FILE*in;
ofstream out("energii.out");
int nr_generatoare;
int energie_necesara;
int energie[NMG];
int cost[NMG];
int SOL[NMG][ENM];
void read()
{
in=fopen("energii.in", "r");
fscanf(in, "%d%d", &nr_generatoare, &energie_necesara);
for (int i=1; i<=nr_generatoare; i++)
fscanf(in, "%d%d", &energie[i], &cost[i]);
}
void build_SOL()
{
for (int i=0; i<=nr_generatoare; i++)
for (int j=1; j<=energie_necesara; j++)
SOL[i][j]=INF;
}
void find_SOL()
{
for (int i=1; i<=nr_generatoare; i++)
for (int j=1; j<=energie_necesara; j++)
{
if (j >= energie[i])
SOL[i][j]=min(SOL[i-1][j], SOL[i-1][j-energie[i]]+cost[i]);
else
SOL[i][j]=min(SOL[i-1][j], cost[i]);
}
}
void show()
{
if (SOL[nr_generatoare][energie_necesara] == INF)
out<<-1;
else
out<<SOL[nr_generatoare][energie_necesara];
}
int main()
{
read();
build_SOL();
find_SOL();
show();
return 0;
}