Cod sursa(job #365228)

Utilizator klamathixMihai Calancea klamathix Data 18 noiembrie 2009 10:03:50
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<cstdio>
#include<vector>
#define maxn 10010
#define MAXX 1000000
using namespace std;

int best[MAXX] ;
bool possible[MAXX];
vector< pair < int , int > > v;
int i , j , n , m , a , b , maxs , mins = 1000000 , s;
int main ()
{
	
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	
	for( i = 1 ; i <= MAXX ; ++i )
		best[i] = 1000000 ;
	
	scanf("%d",&n);
	scanf("%d",&s);
	
		for( i = 1 ; i <= n ; ++i ) { 
		scanf("%d %d",&a,&b);
		v.push_back( make_pair ( a , b ) );
	}
	
	possible[0] = true;
	
	
	
	for ( j = 0 ; j < v.size() ; ++j )
		for( i = s ; i >=0 ; --i ) {
			if ( possible[i] && best[i] + v[j].second < best[i + v[j].first] ) {
				best[i + v[j].first] = best[i] + v[j].second , possible[ i + v[j].first] = true;
				if ( i + v[j].first > maxs ) maxs = i + v[j].first;
			}
}

for( i = maxs ; i >= s ; --i )
	if ( best[i] < mins ) mins = best[i];

if ( mins == 1000000 ) mins = - 1;

printf("%d\n",mins);
	
return 0;
}