Cod sursa(job #571269)

Utilizator toniobFMI - Barbalau Antonio toniob Data 4 aprilie 2011 11:08:07
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <cstdlib>
using namespace std;

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

const int N = 5003;
const int INF = 1 << 30;
int n, k, v[N * 7], suma;

int min (int x, int y) {
	return x < y ? x : y;
}

void citire () {
	in >> n >> k;
	for (int i = 1; i <= k; ++i) {
		v[i] =INF;
	}
	for (int i = 1, x, y; i <= n; ++i) {
		in >> x >> y;
		suma += x;
		v[x] = min (y, v[x]);
	}
}

void exe () {
	if (suma < k) {
		out << "-1\n";
		exit (0);
	}
	
	for (int i = 1; i <= k; ++i) {
		for (int j = k; j >= 1; --j) {
			if (v[i] != INF && v[j] != INF && v[i + j] > v[i] + v[j]) {
				v[i + j] = v[i] + v[j];
			}
		}
	}
}

void afisare () {
	while (1) {
		if (v[k]) {
			out << v[k] << '\n';
			return;
		}
		++k;
	}
}

int main () {
	citire ();
	
	exe ();
	
	afisare ();
	
	return 0;
}