Cod sursa(job #1096679)

Utilizator roby2001Sirius roby2001 Data 2 februarie 2014 15:08:04
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
/*
   Keep It Simple!
*/

#include <cstdio>
 
#define MAXN 1005
#define MAXG 10000005
#define min(a,b) a>b?b:a 

int N, G;
int E[MAXN],C[MAXN];
int D[MAXG];
long long S,V;
 
int main()
{
    freopen("energii.in", "r", stdin);
    freopen("energii.out", "w", stdout);
 
    scanf("%d%d", &N, &G);
    for(int i = 1; i <= N; ++i)
	{
        scanf("%d%d", &E[i],&C[i]);
		S += C[i];
		V += E[i];
	}
	if( V < G )
	{
		printf("-1");
		return 0;
	}
	else if ( V == G )
	{
		printf("%lld",S);
		return 0;
	}

	for(int i=1; i<=G; i++)
		D[i] = 10000005;

	for(int i=1; i<=N; i++)
		for(int j = G; j >= 0; j--)
		{
			if( j + E[i] <= G && D[ j+E[i] ] < D[j] + C[i])
				D[ j+E[i] ] = D[j] + C[i];
			else if( j + E[i] > G && D[ G ] < D[j] + C[i])
				D[G] = D[j] + C[i];
		}
	  printf("%d ",D[G]);




    return 0;
}