Cod sursa(job #1504210)

Utilizator ArkinyStoica Alex Arkiny Data 17 octombrie 2015 15:12:33
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include<stdio.h>
#include<stdlib.h>

#define G_MAX 1001
#define W_MAX 5001

FILE *in, *out;

#define MIN(a,b)(a<b?a:b)

int C[G_MAX],E[W_MAX],B[G_MAX+1][W_MAX+1], G, W;

int main()
{
	in = fopen("energii.in", "r");
	out = fopen("energii.out", "w");
	fscanf(in, "%d%d", &G, &W);

	int i,j;
	for (i = 1;i <= G;++i)
		fscanf(in, "%d%d",&E[i],&C[i]);

	for (i = 1;i <= W;++i)
		B[0][i] = 1 << 30;
	for (i = 1;i <= G;++i)
		for (j = 1;j <= W;++j)
			if (E[i] > j)
			{
				B[i][j] = B[i - 1][j];
			}
			else
				B[i][j] = MIN(B[i - 1][j], B[i - 1][j - E[i]] + C[i]);
	if (B[G][W] == 1 << 31)
		fprintf(out, "%d", -1);
	else
		fprintf(out, "%d", B[G][W]);

	return 0;
}