Cod sursa(job #295440)

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

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


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;
	for(i=1;i<=g;i++)
	{
		maxt=max;
		for(j=maxt;j>=mint;j--)
			if(s[j] && (s[j]+c[i]<s[j+e[i]] || ! s[j+e[i]]))
			{
				if(!s[j+e[i]])
				{
					if(s[j]+c[i]<MAX && (s[j]+c[i]<min || !min))
					{

						s[j+e[i]]=s[j]+c[i];
						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];

					if(j+e[i]>=w && (s[j]+c[i]<min || !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 || !min)
			{
				s[e[i]]=c[i];
				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==0)
		fout<<-1;
	else
		fout<<min;
	fout.close();
}

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