Cod sursa(job #301879)

Utilizator mottyMatei-Dan Epure motty Data 8 aprilie 2009 15:03:14
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<cstdio>
#include<vector>
#define N 20010
#define G 5010
#define INF 1000000001
#define min(a,b) a<b ? a:b
using namespace std;
int en[G],pr[G],w,g,v[N];

long long pmax;

void cit()
{
	scanf("%d%d",&g,&w);
	for( int i=0 ; i<g ; ++i )
	{
		scanf("%d%d",&en[i],&pr[i]);
		pmax+=(long long)en[i];
	}
	for( int i=1 ; i<N ; ++i )
		v[i]=INF;
}

void calc()
{
	for( int i=0 ; i<g ; ++i )
		for( int j=w-1 ; j>=0 ; --j )
			if( v[j]!=INF )
				if( v[ j + en[i] ] > v[j] + pr[i] )
					v[ j + en[i] ] = v[j] + pr[i] ;
}

void scr()
{/*
	for( int i=0 ; i<=pmax ; ++i )
		printf("%d ",v[i]);
	printf("\n");*/
	int rez=INF;
	for( int i=w ; i<=5500 ; ++i )
		rez=min( rez , v[i] );
	if( rez==INF )
		printf("-1\n");
	else
		printf("%d\n",rez);
}

int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	cit();
	if(pmax<w)
	{
		printf("-1\n");
		return 0;
	}
	calc();
	scr();
	return 0;
}