Cod sursa(job #679060)

Utilizator informatician28Andrei Dinu informatician28 Data 12 februarie 2012 18:40:17
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int g, w, W[1010], P[1010];
int a[1010][5010];

void Citire()
{
	freopen ("energii.in", "r", stdin);
	scanf ("%d%d", &g, &w);
	int i;
	for(i=1; i<=g; i++)
		scanf("%d%d", &W[i], &P[i]);	
}

void Rezolvare()
{
	int i, j;
	for	(i=0; i<=g; i++)
		for(j=1; j<=w; j++)
			a[i][j] = 2000000000;
		
	for(i=1; i<=g; i++)
		for(j=1; j<=w; j++)
		{
			if(W[i] <= j)
				a[i][j] = min (a[i-1][j], a[i-1][j-W[i]] + P[i]);
			else
				a[i][j] = min (a[i-1][j], P[i]);
		}
}

void Afisare()
{
	freopen ("energii.out", "w", stdout);
	if (a[g][w] == 2000000000)
		printf ("-1\n");
	else
		printf ("%d\n", a[g][w]);
}

int main ()
{
	Citire();
	Rezolvare();
	Afisare();	
	return 0;
}