Pagini recente » Cod sursa (job #991527) | Cod sursa (job #2258724) | Cod sursa (job #1042059) | Cod sursa (job #2190613) | Cod sursa (job #334308)
Cod sursa(job #334308)
#include <stdio.h>
#include <stdlib.h>
#define N 1024
#define P 6000
struct generator
{
int a,b;
};
generator v[N];
int g,w,s,cost[P];
char marc[P],salv[P];
void read()
{
scanf("%d%d",&g,&w);
int i;
for (i=1; i<=g; i++)
{
scanf("%d%d",&v[i].a,&v[i].b);
s+=v[i].a;
}
}
int compar(const void *p,const void *q)
{
generator x=*(generator*)p;
generator y=*(generator*)q;
if (x.b<y.b)
return -1;
if (x.b>y.b)
return 1;
if (x.a>y.a)
return -1;
if (x.a<y.a)
return 1;
return 0;
}
void solve()
{
int i,j,t;
marc[0]=1;
for (i=1; i<=g; i++)
{
for (j=0; j<=w; j++)
salv[j]=marc[j];
for (j=0; j<w; j++)
if (marc[j])
{
if (j+v[i].a>=w)
t=w;
else
t=j+v[i].a;
if (marc[t]==0)
{
if (salv[t]==0)
{
salv[t]=1;
cost[t]=cost[j]+v[i].b;
}
else
if (cost[j]+v[i].b<cost[t])
cost[t]=cost[j]+v[i].b;
}
else
if (cost[j]+v[i].b<cost[t])
cost[t]=cost[j]+v[i].b;
}
for (j=0; j<=w; j++)
marc[j]=salv[j];
}
printf("%d\n",cost[w]);
}
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
read();
if (s<w)
printf("-1\n");
else
{
qsort(v+1,g,sizeof(v[0]),compar);
solve();
}
return 0;
}