Cod sursa(job #1495895)

Utilizator andrici_cezarAndrici Cezar andrici_cezar Data 3 octombrie 2015 20:40:20
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>
#include <algorithm>

using namespace std;

short N, G, result[5001][10001];

struct obj { int w; int p; } el;

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

	scanf("%d %d\n", &N, &G);

	for (int elIndex = 0; elIndex < N; ++elIndex) {
		scanf("%d %d\n", &el.w, &el.p);

		for (int currG = 1; currG <= G; ++currG) {
			if (currG > el.w || currG == el.w) {
				int val = result[currG - el.w][elIndex] + el.p;
				result[currG][elIndex+1] = max(result[currG][elIndex], val);
			} else {
				result[currG][elIndex+1] = result[currG][elIndex];
			}
		}
	}

	// for (int i = 1; i <= G; ++i) {
	// 	for (int j = 1; j <= N; ++j) {
	// 		printf("%d ", result[i][j]);
	// 	}
	//
	// 	printf("\n");
	// }

	// while (result[G][N] == 0) {
	// 	--G;
	// }

	printf("%d\n", result[G][N]);

	return 0;
}