Pagini recente » Cod sursa (job #2402795) | Cod sursa (job #2154872) | Cod sursa (job #1931312) | Cod sursa (job #857197) | Cod sursa (job #2366466)
#include <fstream>
#define len 1002
#define x first
#define y second
using namespace std;
ifstream in("energii.in");
ofstream out("energii.out");
pair<unsigned, unsigned> v[len];
unsigned G, W, sol[len];
unsigned long long cmin;
bool exista;
bool esol(unsigned k)
{
unsigned long long sum = 0;
for(unsigned i = 1; i <= k;)
sum += v[sol[i++]].x;
return sum >= W;
}
unsigned long long cost(unsigned k)
{
unsigned long long sum = 0;
for(unsigned i = 1; i <= k;)
sum += v[sol[i++]].y;
return sum;
}
void back(unsigned k)
{
for(unsigned i = sol[k - 1] + 1; i <= G; ++i)
{
sol[k] = i;
bool cond = esol(k);
if(cond)
{
exista |= 1;
unsigned long long c = cost(k);
cmin = (!cmin ? c : min(cmin, c));
}
else if(k < G && !cond)
back(k + 1);
}
}
int main()
{
in >> G >> W;
for(unsigned i = 0; i != G;)
{
unsigned E, C;
in >> E >> C;
v[++i] = {E, C};
}
back(1);
switch(exista) {
case true:
out << cmin;
break;
case false:
out << -1;
break;
}
return 0;
}