Pagini recente » Cod sursa (job #2593023) | Cod sursa (job #3221478) | Cod sursa (job #2745491) | Cod sursa (job #2290510) | Cod sursa (job #141223)
Cod sursa(job #141223)
#include <cstdio>
#define GM 1010
#define WM 5010
#define inf 2000000000
long a[WM];
int v[WM], c[WM];
int g, w;
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
scanf("%d", &g);
scanf("%d", &w);
for (int i=1; i<=g; ++i)
scanf("%d%d", &v[i], &c[i]);
for (int i=1; i<=w; ++i)
a[i]=inf;
a[0]=0;
long min=inf;
/*
for (int i=1; i<=g; ++i)
for (int j=0; j<=w; ++j)
{
if (v[i]>=w && min>c[i]) min=c[i];
else if (v[i]+j<=w)
{
if (a[v[i]+j]>a[j]+c[i]) a[v[i]+j]=a[j]+c[i];
}
if (j+v[i]>=w && min>a[j]+c[i]) min=a[j]+c[i];
}
*/
for (int i=1; i<=g; ++i)
{
for (int j=w; j>=1; --j)
{
if (j+v[i]<w && a[j+v[i]]>a[j]+c[i]) a[j+v[i]]=a[j]+c[i];
if (j+v[i]>=w && a[j]+c[i]<min) min=a[j]+c[i];
}
if (v[i]>=w && c[i]<min) min=c[i];
if (v[i]<w && c[i]<a[v[i]]) a[v[i]]=c[i];
}
if (min==inf) printf("-1\n");
else printf("%ld\n", min);
fclose(stdin);
fclose(stdout);
return 0;
}