Cod sursa(job #695438)

Utilizator raluca_vacaruVacaru Raluca-Ioana raluca_vacaru Data 28 februarie 2012 12:26:08
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb

#include <cstdio>
#include <algorithm> 
#include <cstring>

using namespace std ;

#define MAXN 5010
#define MAXG 10010

int n, g ;
int w[MAXN], p[MAXN] ;
int d[2][MAXG] ;

void chestie  () {
	int i ;
	for  ( i=1; i<=g; ++i ) 
		d[1][i] = d[2][i] ;
}

int main () {
	int i, cw ;
	freopen ( "rucsac.in", "r", stdin ) ;
	scanf ( "%d %d\n", &n, &g ) ;
	memset ( d[0], 0, sizeof(int)*(g+1) ) ;
	for ( i=1; i<=n; ++i )
		scanf ( "%d %d\n", &w[i], &p[i] ) ;
	fclose ( stdin ) ;
	for ( i=1; i<=n; ++i ) {
		for ( cw=0; cw<=g; ++cw) {
			d[1][cw] = d[0][cw] ;
			if ( w[i] <= cw ) 
				d[1][cw] = max ( d[1][cw], d[0][cw-w[i]] + p[i] ) ;
		}
		chestie () ;
	}
	freopen ( "rucsac.out", "w", stdout ) ;
	printf ( "%d\n", d[1][g] ) ;
	fclose ( stdout ) ;
	return 0 ;
}