Cod sursa(job #641972)

Utilizator Teodor94Teodor Plop Teodor94 Data 30 noiembrie 2011 09:56:02
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include<cstdio>

const int N = 5002;

struct rucsac {
	int g, p;
};

int n, g, d[3][N * 2];
rucsac v[N];

inline int max(int x, int y) {
	return x > y ? x : y;
}

void citire() {
	scanf("%d%d", &n, &g);
	
	for (int i = 1; i <= n; ++i)
		scanf("%d%d", &v[i].g, &v[i].p);
}

void rucsac() {
	for (int i = 1; i <= n; ++i)
		for (int s = 0; s <= g; ++s) {
			d[i & 1][s] = d[(i - 1) & 1][s];
			
			if (v[i].g <= s)
				d[i & 1][s] = max(d[i & 1][s], d[(i - 1) & 1][s - v[i].g] + v[i].p);
		}
		
	printf("%d\n", d[n & 1][g]);
}

int main() {
	freopen("rucsac.in", "r", stdin);
	freopen("rucsac.out", "w", stdout);
	
	citire();
	
	rucsac();
	
	return 0;
}