55 int *item_weights,
double *item_values)
68 Assert(num_items > 0 && item_weights);
70 values =
palloc((1 + max_weight) *
sizeof(
double));
73 for (i = 0; i <= max_weight; ++
i)
79 for (i = 0; i < num_items; ++
i)
81 int iw = item_weights[
i];
82 double iv = item_values ? item_values[
i] : 1;
84 for (j = max_weight; j >= iw; --j)
88 if (values[j] <= values[ow] + iv)
99 values[j] = values[ow] + iv;
void MemoryContextDelete(MemoryContext context)
#define AllocSetContextCreate
Bitmapset * bms_copy(const Bitmapset *a)
#define ALLOCSET_SMALL_SIZES
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
Bitmapset * bms_make_singleton(int x)
MemoryContext CurrentMemoryContext
#define Assert(condition)
Bitmapset * bms_add_member(Bitmapset *a, int x)
Bitmapset * bms_del_members(Bitmapset *a, const Bitmapset *b)
static Datum values[MAXATTR]
Bitmapset * bms_del_member(Bitmapset *a, int x)
Bitmapset * DiscreteKnapsack(int max_weight, int num_items, int *item_weights, double *item_values)
Bitmapset * bms_add_members(Bitmapset *a, const Bitmapset *b)