Pagini recente » Cod sursa (job #1847060) | Cod sursa (job #78596) | Cod sursa (job #1675189) | Cod sursa (job #1776367) | Cod sursa (job #262468)
Cod sursa(job #262468)
#include <stdio.h>
#include <stdlib.h>
struct generator
{
int energie,cost;
};
struct generator2
{
int a, b;
};
generator v[1005];
generator2 m[1005];
int g,w,economie_distrusa;
void read()
{
int i;
scanf("%d%d",&g,&w);
for (i=1; i<=g; i++)
{
scanf("%d%d",&v[i].energie,&v[i].cost);
m[i].a=v[i].energie;
m[i].b=v[i].cost;
}
}
int compare(const void *p,const void *q)
{
generator x=*(generator*)p,y=*(generator*)q;
if (x.cost<y.cost)
return -1;
if (x.cost>y.cost)
return 1;
if (x.energie<y.energie)
return -1;
if (x.energie>y.energie)
return 1;
return 0;
}
int compare2(const void *p,const void *q)
{
generator2 k=*(generator2*)p,l=*(generator2*)q;
if (k.a<l.a)
return -1;
if (k.a>l.a)
return 1;
if (k.b<l.b)
return -1;
if (k.b>l.b)
return 1;
return 0;
}
void sort()
{
qsort(v+1,g,sizeof(v[0]),compare);
}
void sort2()
{
qsort(m+1,g,sizeof(m[0]),compare2);
}
void verif()
{
int i,s=0;
for (i=1; i<=g; i++)
s+=v[i].energie;
if (s<w)
{
printf("-1");
economie_distrusa=1;
}
}
void solve()
{
int costmin=0,energie=0,r,i,costmin2,q,costact,energie2;
for (i=1; i<=g; i++)
if (energie<w)
{
energie+=v[i].energie;
costmin+=v[i].cost;
}
costmin2=1000000;
for (i=g; i>=1; i--)
if (m[i].a<=w)
{
q=1;
energie2=m[i].a;
costact=m[i].b;
//printf("%d ",costact);
while (energie2<w)
{
costact+=m[q].b;
q++;
energie2+=m[q].a;
if (q==i)
break;
}
if (costact<costmin2 && energie2>=w)
costmin2=costact;
}
if (costmin>costmin2)
printf("%d",costmin);
else
printf("%d",costmin2);
}
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
read();
sort();
sort2();
verif();
//afisare();
if (economie_distrusa==0)
solve();
return 0;
}