Cod sursa(job #1580050)

Utilizator RanKBrinduse Alexandru RanK Data 25 ianuarie 2016 13:54:27
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb


#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <vector>

using namespace std;

#define STDIN_FILE_OPEN(FileName) {freopen(FileName, "r", stdin);}
#define STDOUT_FILE_OPEN(FileName) {freopen(FileName, "w", stdout);}

static const int MAXN = 5005;
static const int MAXG = 10005;

static int knapcsack[MAXG];

typedef struct
{
	int w, p;
}Item;

int main()
{
	STDIN_FILE_OPEN("rucsac.in");
	STDOUT_FILE_OPEN("rucsac.out");

	int n, g;
	scanf("%d %d", &n, &g);

	vector<Item> items;
	for (int i = 0; i < n; i++)
	{
		int w, p;
		scanf("%d %d", &w, &p);
		Item it;
		it.w = w;
		it.p = p;
		items.push_back(it);
	}

	while (!items.empty())
	{
		Item it = items.back();
		items.pop_back();

		int w = it.w;
		int p = it.p;

		for (int i = g; i >= w; i--)
		{
			int pos = i - w;
			if (knapcsack[pos] + p > knapcsack[i])
				knapcsack[i] = knapcsack[pos] + p;
		}
	}

	int maxP = 0;
	for (int i = 0; i <= g; i++)
	{
		if (knapcsack[i] > maxP)
			maxP = knapcsack[i];
	}

	printf("%d\n", maxP);
}