Cod sursa(job #469572)

Utilizator loginLogin Iustin Anca login Data 8 iulie 2010 12:36:40
Problema Energii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
# include <fstream>
# define MAX 1000000000
using namespace std;
int n, w, E[1003], C[1003], u[6003][1003], v[6003], es, sol=2*MAX;

void read ()
{
	ifstream fin ("energii.in");
	fin>>n>>w;
	for(int i=1;i<=n;++i)
		fin>>E[i]>>C[i], es+=E[i];
}

void solve ()
{
	int c, i=1;
	for(int i=1;i<=6000;++i)
		v[i]=MAX;
	while (i<=6000)
	{
		c=0;
		for(int j=1;j<=n;++j)
			if (i-E[j]>=0 && !u[i-E[j]][j] && v[i-E[j]]+C[j]<v[i])
			{
				c=j;
				v[i]=v[i-E[j]]+C[j];
			}
		if (c)
		{
			u[i][c]=1;
			for(int k=1;k<=n;++k)
				u[i][k]=u[i-E[c]][k];
		}
		if(i>=w && v[i]<sol)
			sol=v[i];
		++i;
	}
}

int main()
{
	ofstream fout ("energii.out");
	read ();
	if (es<w)
	{
		fout<<"-1";
		return 0;
	}
	solve ();
	if (sol==2*MAX)
		fout<<"-1";
	else
		fout<<sol;
	return 0;
}