Cod sursa(job #681604)

Utilizator mika17Mihai Alex Ionescu mika17 Data 17 februarie 2012 15:00:59
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <fstream>
#include <vector>
#include <climits>

int main()
{
	std::ifstream in("rucsac.in");
	std::ofstream out("rucsac.out");

	int N,G; //{1 ... 5000} {1 ... 10000}
	in >> N >> G;

	std::vector<int> A(G + 1,INT_MIN),B(G + 1,INT_MIN);

	A[0] = 0;
	for(int i = 1;i <= N; ++i)
	{
		int w,p; // {0 ... 10000}
		in >> w >> p;
		for(int g = 0; g <= G; ++g)
		if(A[g] != INT_MIN)
		{
			B[g] = std::max(B[g],A[g]); // nu iau obiectul i
			if(g + w <= G)
				B[g + w] = A[g] + p; //iau obiectul i
		}
		A = B;
	}
	
	int max = A[0];
	for(int g = 1; g <= G; ++g)
	{
		max = std::max(max,A[g]);
	}
	out << max;
	return 0;
}