Cod sursa(job #567012)

Utilizator eukristianCristian L. eukristian Data 29 martie 2011 16:49:28
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>

const int INF = 99999999;
int C[2][5005], EG[1001], CG[1001];
int main()
{
	FILE *f = fopen("energii.in", "r");
	FILE *g = fopen("energii.out", "w");
	
	int n, W;
	
	fscanf(f, "%d %d", &n, &W);
	
	for (int i = 1 ; i <= n ; ++i)
	{
		fscanf(f, "%d %d", &EG[i], &CG[i]);
	}


	C[0][0] = 0;
	for (int i = 1 ; i <= W ; ++i)
		C[0][i] = INF;
	int last = 1;
	for (int i = 1 ; i <= n ; ++i)
	{
		for (int j = 1 ; j <= W ; ++j)
		{
			C[last][j] = C[(last + 1) % 2][j];
			if (j < EG[i])
			{
				if (CG[i] < C[last][j])
					C[last][j] = CG[i];
			}
			else if (C[(last + 1) % 2][j - EG[i]] != INF && (C[(last + 1) % 2][j - EG[i]] + CG[i] < C[last][j]))
				C[last][j] = C[(last + 1) % 2][j - EG[i]] + CG[i];
		}
		last = (last + 1)%2;
	}
	last = (last + 1)%2;

	if (C[n][W] != INF)
		fprintf(g, "%d\n", C[last][W]);
	else
		fprintf(g,"-1\n");
	return 0;
}