Pagini recente » Cod sursa (job #1844145) | Cod sursa (job #622147) | Cod sursa (job #1244192) | Cod sursa (job #1307550) | Cod sursa (job #494989)
Cod sursa(job #494989)
#define DEBUG 0
#include <fstream>
#if DEBUG == 1
#include <iostream>
#endif
#define Enough(i) (i >= W)
using namespace std;
int G, W;
struct ASK {
int Energ, Cost;
} *F;
int compare (const void* a, const void* b)
{
ASK *aa, *bb;
aa = (ASK *) a;
bb = (ASK *) b;
return aa->Cost - bb->Cost;
}
int main()
{
ifstream in ("energii.in");
ofstream out ("energii.out");
in>>G>>W;
F = new ASK[4*G*G];
in>>F[0].Energ>>F[0].Cost;
for (int i=1; i < G; i++) {
in>>F[i].Energ>>F[i].Cost;
}
int Wh=G;
for (int i=G-1; i >= 0; i--)
for (int j=i-1; j >= 0; j--, Wh++)
{
F[Wh].Energ = F[i].Energ + F[j].Energ;
F[Wh].Cost = F[i].Cost + F[j].Cost;
}
#if DEBUG == 1
cout<<"Array is now: ";
for (int i=0; i < Wh; i++)
cout<<"\n\r<item="<<i<<" energ="<<F[i].Energ<<" cost="<<F[i].Cost<<">";
cout<<endl<<endl;
#endif
qsort(F, Wh, sizeof(ASK), compare);
#if DEBUG == 1
cout<<"Array is now: ";
for (int i=0; i < Wh; i++)
cout<<"\n\r<item="<<i<<" energ="<<F[i].Energ<<" cost="<<F[i].Cost<<">";
cout<<endl<<endl;
#endif
int i;
for (i=0; i < Wh; i++)
if (F[i].Energ >= W)
{
#if DEBUG == 1
cout<<"Cost total: "<<F[i].Cost<<", energie generata: "<<F[i].Energ<<"\\"<<W;
#endif
out<<F[i].Cost; break;
}
#if DEBUG == 1
if(i == Wh) cout<<"Imposibil.";
cout<<endl<<endl;
#endif
if(i == Wh) out<<-1;
in.close(); out.close();
delete[] F;
return 0;
}