Cod sursa(job #596431)

Utilizator maritimCristian Lambru maritim Data 17 iunie 2011 12:11:38
Problema Energii Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<stdio.h>

#define MaxN 11000
#define INF 1012100
#define ll long long

ll W[MaxN];
bool Wb[MaxN];
int G;
int Wacc;
int a;
int b;
ll MIN = INF;

int main()
{
	FILE *f = fopen("energii.in","r");
	FILE *g = fopen("energii.out","w");
	
	fscanf(f,"%d %d",&G,&Wacc);
	for(int j=1;j<=G;j++)
	{
		fscanf(f,"%d %d",&a,&b);
		for(int i=Wacc-1;i>-1;i--)
			if(Wb[i])
			{
				if((!W[i + a] || W[i + a] > W[i] + b) && a + i < Wacc)
				{  W[i + a] = W[i] + b; Wb[i + a] = true;  }
				if(i + a >= Wacc && W[i] + b < MIN)
					MIN = W[i] + b;
			}
		if((!W[a] || W[a]>b) && a < Wacc)
		{	W[a] = b; Wb[a] = true;	}
		if(a >= Wacc && b < MIN)
			MIN = b;
	}
	if(MIN == INF)
		fprintf(g,"-1");
	else
		fprintf(g,"%llu",MIN);
	
	fclose(g);
	fclose(f);
	return 0;
}