Pagini recente » Cod sursa (job #1235785) | Cod sursa (job #372361) | Cod sursa (job #2963069) | Cod sursa (job #2516809) | Cod sursa (job #1007102)
#include <iostream>
#include <fstream>
#define lmax 5010
using namespace std;
int N,G,g[lmax],v[lmax],comb[lmax],k;
long long valMax=0;
ifstream in("rucsac.in");
ofstream out("rucsac.out");
void insumare(int p)
{
int val=0,gr=0;
bool ok=true;
for(int i=1;(i<=p) && (ok==true) ;i++)
{
val+=v[comb[i]];
gr+=g[comb[i]];
if(gr>G)
{
ok=false;
}
}
if(ok==true)
{
if(val>valMax)
{
valMax=val;
}
}
}
bool solutie(int p)
{
return (p==k);
}
void bkt(int p)
{
int val;
for(val=comb[p-1]+1;val<=N;val++)
{
comb[p]=val;
if(solutie(p))
{
insumare(p);
}
else
{
bkt(p+1);
}
}
}
void bt(int i)
{
k=i;
bkt(1);
}
void start()
{
for(int i=1;i<=N;i++)
{
bt(i);
comb[0]=0;
}
}
int main()
{
in>>N>>G;
for(int i=1;i<=N;i++)
{
in>>g[i]>>v[i];
}
start();
out<<valMax;
}