Pagini recente » Cod sursa (job #1779739) | Cod sursa (job #2677554) | Cod sursa (job #138770) | Cod sursa (job #2492321) | Cod sursa (job #3254933)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("rucsac.in");
ofstream cout("rucsac.out");
int n, greutateMaxima;
vector<int> greutate, valoare;
vector<bool> luat;
int sol = -1;
bool iesiInPLM(int poz, int greutateCurenta, int valoareCurenta)
{
if(greutateCurenta > greutateMaxima)
return true;
if(poz == n)
{
sol = max(sol, valoareCurenta);
return true;
}
return false;
}
void bkt(int poz, int greutateCurenta, int valoareCurenta)
{
if(iesiInPLM(poz, greutateCurenta, valoareCurenta))
return;
//cout << poz << " " << luat[poz] << "\n";
luat[poz+1] = false;
bkt(poz+1, greutateCurenta, valoareCurenta);
luat[poz+1] = true;
bkt(poz+1, greutateCurenta + greutate[poz+1], valoareCurenta + valoare[poz+1]);
}
int main()
{
cin >> n >> greutateMaxima;
luat.resize(n+1, false);
greutate.resize(n+1);
valoare.resize(n+1);
for(int i = 1;i<=n;i++) cin >> greutate[i] >> valoare[i];
bkt(0, 0, 0);
cout << sol;
}