Cod sursa(job #417521)

Utilizator drywaterLazar Vlad drywater Data 14 martie 2010 14:50:13
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <stdio.h>
int n,w,a[1001],b[1001],i,j,max;
long long dp[20001],s,mx=1000000000;
FILE *f=fopen("energii.in","r"),*g=fopen("energii.out","w");
int main(void)
{
	fscanf(f,"%d%d",&n,&w);
	for (i=1;i<=n;i++)
	{	fscanf(f,"%d%d",&a[i],&b[i]); s=s+a[i]; }
	if (s>=w)
	{
		max=0;
		dp[0]=1;
		for (i=1;i<=n;i++)
		{
			for (j=max;j>=0;j--)
			{
				if (dp[j]!=0 && (dp[j+a[i]]>dp[j]+b[i] || dp[j+a[i]]==0))
				{	dp[j+a[i]]=dp[j]+b[i];
				if (j+a[i]>max) max=j+a[i];
				if (j+a[i]>=w && dp[j+a[i]]<mx) mx=dp[j+a[i]];}
			}
			if (max>w) max=w;
		}
		fprintf(g,"%lld",mx-1);
	}
	else fprintf(g,"-1");
	fclose(g);
	return 0;
}