Cod sursa(job #639716)

Utilizator alutzuAlexandru Stoica alutzu Data 23 noiembrie 2011 20:30:52
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<cstdio>

const int INF = 11111 ;

int cost [ 15001 ] ;
int e [ 5001 ] , c [ 5001 ] ;

int max ( int a , int b )
{
	if ( a > b )
		return a;
	return b ;
}

int main ( )
{
	freopen ( "energii.in", "r", stdin ) ;
	freopen ( "energii.out" , "w", stdout ) ;
	
	int n , w , m = -INF , i , W ;
	int j ;
	
	scanf ( "%d%d", & n , & w ) ;
	
	for ( i = 1 ; i <= n ; ++ i )
	{
		scanf ( "%d%d", & e[i] , &c[i] ) ;
		//e = energie ; c= cost
		m = max ( m , e[i] ) ;
	}
	
	W = m + w ;
	
	for ( i = 1 ; i <= W ; ++ i )
		cost[i]=INF;
	cost[0]=0;
	
	for ( i = 1 ; i <= w ; ++ i )
	{
		for ( j = w-1 ; j >= 0 ; -- j )
			if ( cost[ j ] + c[i] < cost [ j + e[i] ] )
				cost [ j+e[i] ] = cost[j] + c[i] ;
	}
	m = INF ;
	for ( i = w ; i <= W ; ++ i )
		if ( cost[i] < m )
			m = cost[i] ;
	if ( m == INF )
		printf ( "-1" ) ;
	else
		printf ( "%d" , m ) ;
	return 0 ;
}