Pagini recente » Cod sursa (job #1090071) | Cod sursa (job #2579447) | Cod sursa (job #2174001) | Cod sursa (job #1829020) | Cod sursa (job #88009)
Cod sursa(job #88009)
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int e, c;
} generator;
generator v[1005], b[1005];
int e[5005], c[5005], n, x, suma;
int cmp(const void*a, const void*b)
{
long int x=*(long int*)a, y=*(long int*)b;
if(v[x].c==v[y].c) return v[x].e-v[y].e;
else return v[x].c-v[y].c;
}
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
scanf("%d%d",&n,&x);
int i, j, min, ord[1009];
for (i=1; i<=n; i++)
{
scanf("%d %d",&v[i].e,&v[i].c);
suma+=v[i].e;
e[ v[i].e ] = 1;
ord[i]=i;
}
if (suma<x){ printf("-1"); return 0;}
qsort(ord,n+1,sizeof(int),cmp);
for (i=1; i<=n; ++i) b[i]=v[ord[i]];
e[0]=1;
int max=1;
min=10000;
for(i=1; i<=n; i++)
for (j=w; j>=0; j--)
if (e[j]==1)
{
e[j+b[i].e]=1;
if (c[j+b[i].e]==0) c[j+b[i].e]+=(b[i].c+c[j]);
if (j+b[i].e>=max) max=j+b[i].e;
if (j+b[i].e>x && c[j+b[i].e]<min) min=c[j+b[i].e];
}
printf("%d",min);
return 0;
}