Cod sursa(job #489391)

Utilizator loginLogin Iustin Anca login Data 2 octombrie 2010 14:37:09
Problema Energii Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
# include <fstream>
# include <iostream>
# define DIM 1003
# define EMax 10003
# define infinit 1000000000
using namespace std;
int g, w, e[DIM], c[DIM], h[EMax], cmin=infinit, s, v[EMax];

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<=2*w+1;++i)
		h[i]=infinit;
	for(int i=1;i<=s && i<=2*w+1;++i)
		for(int j=1;j<=g;++j)
			if (i-e[j]>=0 && h[i-e[j]]+c[j]<h[i])
			{
				int p=i-e[j], pp=0;
				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;
}