Pagini recente » Cod sursa (job #405543) | Cod sursa (job #82007) | Cod sursa (job #182321) | Cod sursa (job #1720275) | Cod sursa (job #10449)
Cod sursa(job #10449)
#include<fstream.h>
struct ms
{
int v;
int p;
}c[1002];
int a[1002],b[1002];
int main()
{
long int s,min=-1,tmp;
int t,g,w,i;
ifstream fin("energii.in");
ofstream fout("energii.out");
fin>>g>>w;
s=0;
for(i=1;i<=g;i++)
{ fin>>a[i]>>b[i]; s+=a[i];}
fin.close();
if(s<w) {fout<<-1;}
else
{
int max,poz;
for(i=1;i<=g;i++)
{ c[i].v=a[i]-b[i]; c[i].p=i;}
t=g; poz=0;
while(t>0)
{
max=-20000;
for(i=1;i<=t;i++)
{ if(max<c[i].v) {max=c[i].v; poz=i;}
else if(max==c[i].v)
{
if(a[c[i].p]>=a[c[i-1].p])
{max=c[i].v; poz=i;}
}
}
if(poz){tmp=c[t].v;
c[t].v=c[poz].v;
c[poz].v=tmp;
tmp=c[t].p;
c[t].p=c[poz].p;
c[poz].p=tmp;}
poz=0;
t--;
} max=min=0;
int t2=w;
for(i=g;i>=1;i--)
{
w-=a[c[i].p];
if(w<=0)
{ if(w+a[c[i].p]>0)
min+=b[c[i].p];
break;
}
min+=b[c[i].p];
}
t=g;
for(i=1;i<=g;i++)
{ c[i].p=i;}
while(t>0)
{
max=0;
for(i=1;i<=t;i++)
{ if(max<=a[i]) {max=a[i]; poz=i;}
}
if(poz){tmp=a[t];
a[t]=a[poz];
a[poz]=tmp;
tmp=c[t].p;
c[t].p=c[poz].p;
c[poz].p=tmp;}
poz=0;
t--;
} w=t2;
long int s1=0;
for(i=g;i>=1;i--)
{ w-=a[i]; s1+=b[c[i].p]; if(w<=0) break;}
if (s1<min) fout<<s1; else fout<<min;
}
fout.close();
return 0;
}