Cod sursa(job #110914)

Utilizator mithyPopovici Adrian mithy Data 28 noiembrie 2007 00:04:09
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>
#define POS_BUN 1
#define POS_REA -1
#define NMax 100000

int n, max, cost[NMax], ener[NMax];
int a[NMax], b[NMax], pos[NMax];

int main()
{
	int i, j, mx, ex;
	FILE *fin = fopen( "energii.in", "rt" );
	fscanf( fin, "%d %d", &n, &max );
	for (i=0; i<n; i++)
		fscanf( fin, "%d %d", &ener[i], &cost[i] );

	a[n-1] = cost[n-1];
	b[n-1] = ener[n-1];
	if ( b[n-1] == max )
		pos[n-1] = n-1;
	else
		pos[n-1] = POS_REA;

	for (i=n-2; i>=0; i--)
	{
		mx = ex = 0;
		for (j=i+1; j<n; j++)
			if ( ener[i] + b[j] <= max )
				if ( a[j] > mx || ener[i] + b[j] == max )
				{
					mx = a[j];
					ex = b[j];
				}

		a[i] = cost[i] + mx;
		b[i] = ener[i] + ex;		
		
		if ( b[i] == max )
			pos[i] = i;
		else pos[i] = POS_REA;
	}

	FILE *fout = fopen( "energii.out", "wt" );
	mx = 100000;
	for (i=0; i<n; i++)
		if ( pos[i] != POS_REA )
			if ( a[i] < mx )
				mx = a[i];
		
	fprintf( fout, "%d", mx );
	fprintf( fout, "\n" );
	return 0;
}