Cod sursa(job #2232500)

Utilizator DRLDRLRaul Ronald Galea DRLDRL Data 19 august 2018 18:39:01
Problema Energii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#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;
}