Cod sursa(job #711544)

Utilizator fhandreiAndrei Hareza fhandrei Data 12 martie 2012 12:32:37
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
//Include
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;

//Constante
const int MAX_SIZE = (int)5e3+1;

//Variabile
int n, g;
int greutate[MAX_SIZE], cost[MAX_SIZE];

vector<int> curent, precedent;

//Main
int main()
{
	freopen("rucsac.in", "rt", stdin);
	freopen("rucsac.out", "wt", stdout);
	
	scanf("%d%d", &n, &g);
	for(int i=1 ; i<=n ; ++i)
		scanf("%d%d", &greutate[i], &cost[i]);
	
	curent.resize(g+1);
	precedent.resize(g+1);
	
	for(int i=1 ; i<=n ; ++i)
	{
		for(int j=0 ; j<=g ; ++j)
		{
			curent[j] = precedent[j];
			if(j >= greutate[i])
				curent[j] = max(curent[j], precedent[j - greutate[i]] + cost[i]);
		}
		curent.swap(precedent);
	}
	
	printf("%d", precedent[g]);
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}