Cod sursa(job #1473995)

Utilizator aimrdlAndrei mrdl aimrdl Data 20 august 2015 17:32:39
Problema Problema rucsacului Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

int main (void) {
	freopen("rucsac.in", "r", stdin);
	freopen("rucsac.out", "w", stdout);
	
	int N, W, w, p;
	
	scanf("%u %u", &N, &W);
	
	int prev[W+1], curr[W+1];
	
	//init
	memset(prev+1, 0, W * sizeof(int));
	
	int m = 0;
	//go
	for (int i = 0; i < N; ++i) {
		scanf("%u %u", &w, &p);
		for (int j = 1; j <= W; ++j) {
			int test = ((j - w) > 0) ? (prev[j-w] + p) : 0;
			curr[j] = max(test, prev[j]);
			if (curr[j] > m) m = curr[j];
		}
		
		memcpy(prev+1, curr+1, W * sizeof(int)); 
	}
	
	printf("%d\n", m);
	
	return 0;
}