Cod sursa(job #159442)

Utilizator hazegirlCatalina Predoi hazegirl Data 14 martie 2008 09:46:04
Problema Energii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
//energii
#include<stdio.h>
int min[5002][1002];

int main()
{int i,j, gen,w,en[1002], c[1002];
long int sum1=0,cmin=10000000,add,a;
//ifstream f("energii.in");
//ofstream g("energii.out");
//f>>gen>>w;
FILE *f=fopen("energii.in","r"),*g=fopen("energii.out","w");
fscanf(f,"%d %d", &gen,&w);
for(i=1;i<=gen;++i)
       {fscanf(f,"%d %d",&en[i],&c[i]);
	sum1+=en[i];
	if(cmin>c[i])
		{ cmin=c[i];
		add=i;}
	if(cmin==c[i])
		if(en[i]>en[add])
			add=i;

	}
if(sum1<w)
	{fprintf(g,"%d","-1",'\n');
	fclose(f);
	fclose(g);
	return 0;}
for(i=1;i<=en[add];i++)
	{min[i][0]=c[add];
	 min[i][add]=1;}
for(i=en[add]+1;i<=w;i++)
	{ cmin=10000000;
	for(j=1;j<=gen;++j)
		{a=i-en[j]; if(a<0) a=0;
		if(min[a][j]==0)
			if(min[a][0]+c[j]<cmin)
				{cmin=min[a][0]+c[j];
				add=j;
				}
		}
	min[i][0]=cmin;
	min[i][add]=1;
	a=i-en[add];
	if(a<0) a=0;
	for(j=1;j<=gen;++j)
		  if(min[a][j]==1)
			min[i][j]=1;
	}
fprintf(g,"%d",min[w][0],'\n');
fclose(f);
fclose(g);
return 0;
}