Cod sursa(job #766832)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 12 iulie 2012 12:26:19
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<stdio.h>

#define NMAX 1001
#define EMAX 10001

int v[ NMAX ][2], a[ EMAX ], m[ EMAX ], n, x;

void read()
{
	int i;
	FILE *f = fopen("energii.in", "r");
	fscanf(f, "%d %d", &n, &x);
	for(i = 1; i <= n; i++)
		fscanf(f, "%d %d", &v[i][0], &v[i][1]);
	fclose(f);
}

void solve()
{
	int i, j, max = 0;
	
	m[0] = 1;
	
	for(i = 1 ; i <= n; i++)
	{
		for(j = max; j >= 0; j--)
			if( (!a[ v[i][0] + j ] && m[j] ) || ( (v[i][1] + a[j] < a[ v[i][0] + j]) && m[j]) )
			{
				a[ v[i][0] + j ] = v[i][1] + a[j];
				m[ v[i][0] + j ] = 1;
				if(v[i][0] + j > max)
					max = v[i][0] + j;
			}
	}
	if(!a[x])
		a[x] = -1;
}

void write()
{
	FILE *g = fopen("energii.out", "w");
	fprintf(g, "%d\n", a[x]);
	fclose(g);
}

int main()
{
	read();
	solve();
	write();
	return 0;
}