Pagini recente » Cod sursa (job #1744646) | Cod sursa (job #895569) | Cod sursa (job #3162257) | Cod sursa (job #1380882) | Cod sursa (job #424211)
Cod sursa(job #424211)
#include <cstdio>
int g,w,total,minim=1<<30;
int e[1010],c[1010],min[5010];
void citire()
{
scanf("%d%d",&g,&w);
for (int i=1;i<=g;++i)
{
scanf("%d%d",&e[i],&c[i]);
total+=e[i];
}
}
void knapsack()
{
for (int i=1;i<=g;++i)
{
if (e[i]>=w)
{
if (c[i]<minim)
minim=c[i];
continue;
}
for (int j=w;j>e[i];--j)
{
if (j+e[i]>=w&&minim>min[j]+c[i])
minim=min[j]+c[i];
if (min[j-e[i]]&&min[j-e[i]]+c[i]<min[j])
min[j]=min[j-e[i]]+c[i];
}
for (int j=e[i];j+e[i]>=w;--j)
if (minim>min[j]+c[i])
minim=min[j]+c[i];
if (min[e[i]]>c[i])
min[e[i]]=c[i];
}
}
int main()
{
freopen ("energii.in","r",stdin);
freopen ("energii.out","w",stdout);
citire();
for (int i=1;i<=w;++i)
min[i]=1<<30;
if (total<w)
{
printf("%d\n",-1);
return 0;
}
knapsack();
printf("%d\n",minim);
return 0;
}