Cod sursa(job #566950)

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

const int INF = 9999999;
int C[1001][1001], 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]);
	}
	
	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] <= 0)
			{
				if (CG[i] < C[i][j])
					C[i][j] = CG[i];
			}
			else if (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, "-1\n");
	else
		fprintf(g,"%d\n",C[n][W]);
	
	return 0;
}