Pagini recente » Cod sursa (job #383560) | Cod sursa (job #1102431) | Cod sursa (job #214923) | Cod sursa (job #2915225) | Cod sursa (job #675068)
Cod sursa(job #675068)
#include<iostream>
#include <fstream>
#include<limits.h>
using namespace std;
int *w,*val,n;
bool *used;
int energie_minima;
bool fara_solutie = false;
int knapsack(int energie_produsa)
{
if(fara_solutie) {
return 0;
}
if(energie_produsa >= energie_minima) {
return 0;
}
int min=50000;
for(int i=0;i<n;i++)
{
if(!used[i])
{
used[i] = true;
int valoare = w[i] + knapsack(energie_produsa+val[i]);
if(min>valoare)
{
min=valoare;
}
used[i] = false;
}
}
if(min == 50000) {
fara_solutie = true;
}
return min;
}
int main()
{
int i;
ifstream f("energii.in");
ofstream g("energii.out");
f>>n;f>>energie_minima;
w = new int [n];
val = new int [n];
used = new bool [n];
for(i=0;i<n;i++)
{
f>>val[i];
f>>w[i];
used[i] = false;
}
int rez = knapsack(0);
if(fara_solutie) {
g << -1 << endl;
} else {
g << rez << endl;
}
f.close();
g.close();
return 0;
}