Cod sursa(job #2090144)

Utilizator trifangrobertRobert Trifan trifangrobert Data 17 decembrie 2017 17:17:24
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <algorithm>
#include <fstream>
#define DIM 5010

using namespace std;

int n, gmax;
int dp[2][10010];
struct obiect
{
	int g, v;
	obiect()
	{
		g = v = 0;
	}
	obiect(int a, int b)
	{
		g = a;
		v = b;
	}
};
obiect v[DIM];

void Read()
{
	ifstream fin("rucsac.in");
	fin >> n >> gmax;
	int x, y;
	for (int i = 1;i <= n;++i)
	{
		fin >> x >> y;
		v[i] = obiect(x, y);
	}
	fin.close();
}

void Solve()
{
	int p = 0;
	for (int i = 1;i <= n;++i)
	{
		for (int j = 1;j <= gmax;++j)
		{
			if (v[i].g <= j)
				dp[1][j] = max(dp[0][j], dp[0][j - v[i].g] + v[i].v);
		}
		for (int j = 1;j <= gmax;++j)
			dp[0][j] = dp[1][j];
	}
}

void Write()
{
	ofstream fout("rucsac.out");
	int pmax = -1;
	for (int j = 1;j <= gmax;++j)
		pmax = max(pmax, dp[1][j]);
	fout << pmax << "\n";
	fout.close();
}

int main()
{
	Read();
	Solve();
	Write();
	return 0;
}