Cod sursa(job #585341)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 28 aprilie 2011 22:22:32
Problema Energii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <iostream>
#include <fstream>

using namespace std;

long N, V[1001], G[1001], EMinim, E, C, D[1001][100000], SV, SG=1000000000;

void Citire ()
{
	ifstream fin ("energii.in");
	int i, v=0;
	fin >> N >> EMinim;
	for (i=0; i<N; i++)
	{
		fin >> V[i] >> G[i];
		if (E<EMinim)
		{
			E+=V[i];
			C+=G[i];
		}
		if ((v==0)&&(E>EMinim))
		{
			v=1;
			E+=V[i];
			C+=G[i];
		}
	}
	fin.close ();
}

void Afisare ()
{
	ofstream fout ("energii.out");
	fout << SG << "\n";
	fout.close ();
}

inline int Max (int a, int b)
{
	if (a>b)
	{
		return a;
	}
	return b;
}

int main ()
{
	int i, j;
	Citire ();
	if (E<EMinim)
	{
		SG=-1;
	}
	else
	{
		for (i=0; i<N; i++)
		{
			for (j=1; j<=C; j++)
			{
				if (j>=G[i])
				{	
					D[i][j]=Max (D[i][j-1], D[i][j-G[i]]+V[i]);
				}
				else
				{
					D[i][j]=D[i][j-1];
				}
				if ((D[i][j]>=EMinim)&&(j<SG))
				{
					SG=j;
					break;
				}
			}
		}
	}
	Afisare ();
	return 0;
}