Cod sursa(job #107818)
#include<stdio.h>
#define INF 1000000000
#define N 1000
int n,gmax,gr[N],c[N],cmax[N];
void read()
{
int i;
scanf("%d%d",&n,&gmax);
for(i=1;i<=n;i++)
scanf("%d%d",&gr[i],&c[i]);
}
void dinamica()
{
int i,j,min;
for(i=1;i<=N;i++)
cmax[i]=INF;
min=INF;
for(i=1;i<=n;i++)
for(j=gmax;j>=0;j--)
if(cmax[j]<INF)
{
if(j+gr[i]>=gmax&&cmax[j]+c[i]<min)
min=cmax[j]+c[i];
if(j+gr[i]<=gmax&&cmax[j]+c[i]<cmax[j+gr[i]])
cmax[j+gr[i]]=cmax[j]+c[i];
}
printf("%d\n",min!=INF?min:-1);
}
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
read();
dinamica();
return 0;
}