Cod sursa(job #2219044)

Utilizator oanceadavidOancea David oanceadavid Data 6 iulie 2018 23:45:45
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int cost[1002];
int powgen[1002];

int arr[1002][5002];

int energy(int n, int capacity) {
	if (arr[n][capacity]!= -1) return arr[n][capacity];
	int result;
	if (n == 0)
		result = 1<<31-1;
	else if (capacity <= powgen[n]) {
		result = cost[n];
	}
	else {
		int tmp1 = energy(n - 1, capacity); // nu se alege
		int tmp2 = cost[n] + energy(n - 1, capacity - powgen[n]); // se alege
		result = min(tmp1, tmp2);
	}
	arr[n][capacity] = result;
	return result;
}

int main() {

	ifstream fin("energii.in");
	ofstream fout("energii.out");

	memset(arr,-1,sizeof(arr));
	int n,c;
	fin >> n >> c;
	for (int i = 1; i <= n; i++) {
		fin >> powgen[i];
		fin >> cost[i];
	}

	int res = energy(n, c);
	if (res == 1 << 31 - 1) {
		res = -1;
	}
	fout << res;
	return 0;
}