Cod sursa(job #1245581)

Utilizator danny794Dan Danaila danny794 Data 19 octombrie 2014 15:31:15
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>

#define NMAX 1001
#define GMAX 5001
#define MAX  (1 << 30)

using namespace std;

int N, G, energy[NMAX][2], table[GMAX][2];

void read()
{
	freopen("energii.in", "r", stdin);
	freopen("energii.out", "w", stdout);
	scanf("%d%d", &N, &G);

	for(int i = 1; i <= N; i++)
		scanf("%d%d", &energy[i][0], &energy[i][1]);
}

void solve()
{
	for(int i = 1; i <= G; i++)
		table[i][1] = MAX;

	for(int k = 1; k <= N; k++)
	{
		int min = energy[k][0] > G ? G : energy[k][0];
		for(int i = 1; i <= G; i++)
			table[i][0] = table[i][1];

		for(int i = 1; i <= min; i++)
			if(table[i][1] > energy[k][1])
				table[i][1] = energy[k][1];

		for(int i = min+1; i <= G; i++)
			if(table[i-min][0] + energy[k][1] < table[i][1])
				table[i][1] = table[i-min][0] + energy[k][1];
	}

	printf("%d", table[G][1] == MAX ? -1 : table[G][1]);
}

int main() {
	read();
	solve();
	return 0;
}