Cod sursa(job #365548)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 19 noiembrie 2009 09:41:45
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
#include <string>
#define DIM 10005
#define INF 0x3f3f3f3f
using namespace std;

int sum, n, g[DIM], price[DIM], Cmax[DIM], j, i, use[DIM];
int total, rez;
void read()
{
	scanf ("%d%d\n",&n,&sum);
	for (i = 1; i <= n; i++) scanf("%d %d\n", &g[i], &price[i]);
}
void knap_si_sack()
{   
	memset ( Cmax, INF, sizeof (Cmax) );
	Cmax[0] = 0;
	use[0] = 1;
	for (i = 1; i <= n; i++)
	    for ( j = sum; j >= 0; j--)
		{
			if ( use[j] && Cmax[j] + price[i] < Cmax[ j + g[i] ] )
			{
				Cmax[ j + g[i] ] = Cmax[j] + price[i], use[ j + g[i] ] = 1;
			    if ( j + g[i] > total ) total = j + g[i] ;
			}
		}
		
	rez = INF;
	for (i = total; i >= sum; i--)
		if ( Cmax[i] < rez ) rez = Cmax[i]; 
	if ( rez != INF ) printf ("%d\n", rez);
		else printf ("-1\n");
}
		
int main()
{
	freopen ("energii.in","r",stdin);
	freopen ("energii.out","w",stdout);
	read();
	knap_si_sack(); // :)
	return 0;
}