Cod sursa(job #295469)

Utilizator irene_mFMI Irina Iancu irene_m Data 3 aprilie 2009 12:24:33
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream.h>
#define MaxG 1005
#define MAX 10000009

long e[MaxG],c[MaxG],max,g,w,s[MAX],min=MAX;
int a[MAX];


void cit()
{
	int i;
	ifstream fin("energii.in");
	fin>>g>>w;
	for(i=1;i<=g;i++)
		fin>>e[i]>>c[i];
	fin.close();
}

void sol()
{
	long i,maxt,mint=MAX,j,mintt;
	for(i=1;i<=g;i++)
	{
		maxt=max; mintt=mint;
		for(j=maxt;j>=mintt;j--)
			if(a[j] && (s[j]+c[i]<s[j+e[i]] || !a[j+e[i]]))
			{
				if(!a[j+e[i]])
				{
					if(s[j]+c[i]<MAX && (s[j]+c[i]<min))
					{

						s[j+e[i]]=s[j]+c[i];
						a[j+e[i]]=1;
						if(j+e[i]>=w)
							min=s[j]+c[i];
						if(j+e[i]>max)
							max=j+e[i];
						if(j+e[i]<mint)
							mint=j+e[i];
					}
				}
				else
				{
					s[j+e[i]]=s[j]+c[i];
					a[j+e[i]]=1;
					if(j+e[i]>=w && (s[j]+c[i]<min))
						min=s[j]+c[i];
					if(s[j]+c[i]>max)
						max=s[j]+c[i];
					if(s[j]+c[i]<mint)
						mint=s[j]+c[i];
				}
			}
		if(!s[e[i]] || s[e[i]]>c[i])
		{
			if(c[i]<min )
			{
				s[e[i]]=c[i];
				a[e[i]]=1;
				if(e[i]>=w)
					min=c[i];
				if(e[i]>max)
					max=e[i];
				if(e[i]<mint)
					mint=e[i];
			}
		}
	}
}

void afis()
{
	ofstream fout("energii.out");
	if(min==MAX)
		fout<<-1;
	else
		fout<<min;
	fout.close();
}

int main()
{
	cit();
	sol();
	afis();
	return 0;
}