Pagini recente » Cod sursa (job #1126393) | Cod sursa (job #2891297) | Cod sursa (job #800467) | Cod sursa (job #2221458) | Cod sursa (job #2366355)
#include <fstream>
#define len 5001
#define x first
#define y second
using namespace std;
ifstream in("rucsac.in");
ofstream out("rucsac.out");
typedef unsigned long long ull;
pair<unsigned, unsigned> v[len];
unsigned N, G, W, P, sol[len];
ull smax;
bool ebun(unsigned k)
{
ull s = 0;
for(unsigned i = 1; i <= k;)
s += v[sol[i++]].x;
return s <= G;
}
ull sum(unsigned k)
{
ull s = 0;
for(unsigned i = 1; i <= k;)
s += v[sol[i++]].y;
return s;
}
void back(unsigned k)
{
for(unsigned i = sol[k - 1] + 1; i <= N; ++i)
{
sol[k] = i;
if(ebun(k))
{
smax = max(smax, sum(k));
if(k < N)
back(k + 1);
}
}
}
int main()
{
in >> N >> G;
for(unsigned i = 1; i <= N;)
{
in >> W >> P;
v[i++] = make_pair(W, P);
}
back(1);
out << smax;
return 0;
}