Cod sursa(job #489378)

Utilizator loginLogin Iustin Anca login Data 2 octombrie 2010 13:48:02
Problema Energii Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
# include <fstream>
# include <iostream>
# define DIM 1003
# define infinit 1000000000
using namespace std;
int g, w, e[DIM], c[DIM], h[10*DIM], cmin=infinit, s, v[10*DIM];

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

void solve ()
{
	for(int i=1;i<=s && i<=5*DIM-3;++i)
		h[i]=infinit;
	for(int i=1;i<=s && i<=5*DIM;++i)
		for(int j=1;j<=g;++j)
			if (i-e[j]>=0 && h[i-e[j]]!=infinit)
			{
				int p=i-e[j], pp=0;
				if (h[i-e[j]]+c[j]<h[i])
				{
					while (p>0 && !pp)
					{
						if (v[p]==j)pp=1;
						p=p-e[v[p]];
					}
					if (!pp)h[i]=h[i-e[j]]+c[j], v[i]=j;
					if (i>=w && h[i]<cmin)cmin=h[i];
				}
			}
}

int main ()
{
	read (); 
	ofstream fout ("energii.out");
	if (s<w)fout<<"-1";
	else
	{
		solve ();
		fout<<cmin;
	}
	return 0;
}