Cod sursa(job #114138)

Utilizator hadesgamesTache Alexandru hadesgames Data 12 decembrie 2007 19:18:18
Problema Energii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
int a[1001],b[1001],c[10011002],s,s2,min,n,e;
int main()
{
	FILE *in,*out;
	int i,j;
	in=fopen("energii.in","r");
	out=fopen("energii.out","w");
	fscanf(in,"%d",&n);
	fscanf(in,"%d",&e);
	for (i=1;i<=n;i++)
	{
		fscanf(in,"%d%d",&a[i],&b[i]);
		s+=b[i];
		s2+=a[i];
	}
	if (s2<e)
	{
		fprintf(out,"-1\n");
		fclose(in);
		fclose(out);
		return 0;
	}
	min=s;
	for (i=1;i<=n;i++)
	{
		for (j=e;j>=1;j--)
		{
			if (c[j]&&(c[j+a[i]]>c[j]+b[i]||!c[j+a[i]]))
			{
				c[j+a[i]]=c[j]+b[i];
				if (j+a[i]>=e&&min >c[j+a[i]])
					min=c[j+a[i]];
			}
		}
		if (!c[a[i]]||c[a[i]]>b[i])
		{
			c[a[i]]=b[i];
			if (min >b[i]&&a[i]>=e)
				min=b[i];
		}
	}
	/*for (i=1;i<=n;i++)
	{
		for (j=s;j>b[i];j--)
		{
			if (c[j-b[i]]&&c[j-b[i]]+a[i]>c[j])
			{
				c[j]=c[j-b[i]]+a[i];
				if (c[j]>=e&&j<min)
					min=j;
			}
		}
		if (a[i]>c[b[i]])
		{
			c[b[i]]=a[i];
			if (a[i]>=e&&b[i]<min)
				min=b[i];
		}
	}*/
	fprintf(out,"%d\n",min);
	fclose(in);
	fclose(out);
	return 0;
	
}