Cod sursa(job #246797)

Utilizator hazegirlCatalina Predoi hazegirl Data 21 ianuarie 2009 13:44:28
Problema Energii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream.h>     
      
 int g,w,e[1001],c[1001], min=32000,en,cost;
      
 void energ(int p)     
      
 {     
 if(en<w)     
      
     
     for(int i=p;i<=g && cost<min;++i) 
	{ en+=e[i];cost+=c[i];   
        	energ(i+1);     
	en-=e[i];cost-=c[i];
}
else     
     
    if(cost<min) min=cost;     
     
}     
void qsort(int p, int q)
{int st=p,dr=q,x=c[p],y=e[p];
while(st<dr)
	{while(st<dr && x<=c[dr])dr--;
	c[st]=c[dr];e[st]=e[dr];
	 while(st<dr && x>=c[st])st++;
	c[dr]=c[st];e[dr]=e[st];
	}
c[st]=x;e[st]=y;
if(st-1>p) qsort(p,st-1);
if(st+1<q) qsort(st+1,q);
}     
     
int main()     
     
{ifstream f("energii.in");     
     
ofstream h("energii.out");     
     
int i,s=0;     
     
f>>g>>w;     
     
     
for(i=1;i<=g;++i)     
   	{f>>e[i]>>c[i];     
	 s+=e[i];      
  	}     
     
if(s<w) h<<"-1"<<'\n';     
     
else{     
qsort(1,g);     
energ(1);
     
h<<min<<'\n';  }     
     
f.close();     
 h.close();     
     
return 0;     
}