Pagini recente » Cod sursa (job #630082) | Cod sursa (job #1032713) | Cod sursa (job #1577416) | Cod sursa (job #2109662) | Cod sursa (job #1096679)
/*
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;
}