Cod sursa(job #777896)

Utilizator vld7Campeanu Vlad vld7 Data 13 august 2012 17:36:29
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

#define maxN 1005
#define maxG 5005
#define INF 0x3f3f3f3f

using namespace std;

FILE *f = fopen ("energii.in","r");
FILE *g = fopen ("energii.out","w");

int N, G, E[maxN], C[maxN], sum, SOL = INF;
int D[maxN][maxG];

void read()
{
	fscanf (f, "%d%d", &N, &G);
	for (int i = 1; i <= N; i++) {
		fscanf (f, "%d%d", &E[i], &C[i]);
		sum += E[i];
	}
}

void solve()
{
	memset (D, INF, sizeof(D) );
	
	D[0][0] = 0;
	for (int i = 1; i <= N; i++)
		for (int cw = 0; cw <= sum; cw++)
		{
			D[i][cw] = D[i - 1][cw];
			
			if (E[i] <= cw)
				D[i][cw] = min(D[i][cw], D[i - 1][cw - E[i] ] + C[i]);
		}
}

int main()
{
	read();
	if (sum < G)
		fprintf (g, "-1\n");
	else
	{
		solve();
		for (int cw = G; cw <= sum; cw++)
			if (D[N][cw] < SOL)
				SOL = D[N][cw];
		fprintf (g, "%d\n", SOL);
	}
	
	fclose(f);
	fclose(g);
	
	return 0;
}