Cod sursa(job #404992)

Utilizator Cristi09Cristi Cristi09 Data 27 februarie 2010 08:45:10
Problema Energii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
int g,w,p[1002],c[1002],a[2][5003],v[5003],j;
void read()
{
	FILE*f=fopen("energii.in","r");
	fscanf(f,"%d%d",&g,&w);
	int i;
	for(i=0;i<g;++i)
	{
		fscanf(f,"%d%d",&p[i],&c[i]);
	}
	fclose(f);
}
int posibil(int s)
{
	while(s)
	{
		if(a[0][s]==j)return 0;
		s=a[1][s];
	}
	return 1;
}	
int dinamic()
{
	int i,pos=1,var,ct;
	a[0][0]=0;
	for(i=1;i<=w;++i)
	{
		v[i]=99999999;
		if(a[0][i-1]&&p[a[0][i-1]]+a[1][i-1]>=i)
		{
			a[0][i]=a[0][i-1];
			a[1][i]=a[1][i-1];
			v[i]=v[i-1];
		}
		else
		{for(j=0;j<g;++j)
		{
			var=i-p[j];
			if(i-p[j]<0)var=0;
			if(c[j]+v[var]<v[i]&&posibil(var))
			{
				v[i]=c[j]+v[var];pos=j;ct=var;
			}
		}
		a[0][i]=pos;a[1][i]=ct;}
	}
	if(v[w]==99999999)return -1;
	return v[w];
}
int main()
{
	read();
	FILE*g=fopen("energii.out","w");
	fprintf(g,"%d\n",dinamic());
	fclose(g);
	return 0;
}