Cod sursa(job #111249)

Utilizator diac_paulPaul Diac diac_paul Data 28 noiembrie 2007 22:00:43
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>
#define NMax 1001
#define GMax 15001
#define INF 1000000000

long n, g, gen[NMax], cost[NMax];
long cmin[GMax];

void read();
void solve();
void write();

int main()
{
	read();
	solve();
	write();

	return 0;
}

void solve()
{
	long i, j;
	cmin[0] = 0;
	for (i = 1; i < GMax; i++)
		cmin[i] = INF;

	for (i = 0; i < n; i++)
		for (j = GMax - 1; j >= 0; j--)  //folosesc genratorul i
			if (j + gen[i] < GMax && cmin[j + gen[i]] > cmin[j] + cost[i])
				cmin[j + gen[i]] = cmin[j] + cost[i];
}
void read()
{
	FILE *fin = fopen("energii.in", "rt");
	fscanf(fin, "%ld %ld", &n, &g);
	for (int i = 0; i < n; i++)
		fscanf(fin, "%ld %ld", &gen[i], &cost[i]);
	fclose(fin);
}
void write()
{
	FILE *fout = fopen("energii.out", "wt");
	long min = INF;
	for (int i = g; i < GMax; i++)
	{
		if (cmin[i] < min)
			min = cmin[i];
	}
	fprintf(fout, "%ld\n", min != INF ? min : -1);
	fclose(fout);	
}