Cod sursa(job #642244)

Utilizator alutzuAlexandru Stoica alutzu Data 30 noiembrie 2011 19:15:40
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<cstdio>

const int INF = -1 ;

int g[5005] , p[5005 ] ;
int sol [ 10005 ] ;

int main ( )
{
	freopen ( "rucsac.in" , "r" , stdin ) ;
	freopen ( "rucsac.out" , "w" , stdout ) ;
	
	int n , G ;
	int i , j ;
	scanf ( "%d%d", & n , & G ) ;
	
	for ( i = 1 ; i <= n ; ++ i )
	{
		scanf ( "%d%d" , &g[i] , &p[i] ) ;
	}
	
	sol[0] = 0 ;
	for ( i = 1 ; i <= G ; ++ i )
		sol[i] = INF ;
	
	for ( i = 1 ; i <= n ; ++ i )
	{
		for ( j = G - g[i] ; j >= 0 ; --j )
			if ( sol [ j+g[i]] < sol[ j ] + p[i] )
				sol [ j+g[i] ] = sol [ j ] + p[i] ;
	}
	
	int max = INF , maxi ;
	
	for ( i = 0 ; i <= G ; ++ i )
		if ( sol[i] > max )
		{
			max = sol[i] ;
		}
	
	printf ( "%d" , max ) ;
	
	return 0 ;
}