Cod sursa(job #566988)

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

const int INF = 99999999;
int C[1001][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;

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


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