  We solve the Bin Packing problem in $O^*(2^k)$ time, where $k$ is the number
of items less or equal to one third of the bin capacity. This parameter
measures the distance from the polynomially solvable case of only large (i.e.,
greater than one third) items. Our algorithm is actually designed to work for a
more general Vector Bin Packing problem, in which items are multidimensional
vectors. We improve over the previous fastest $O^*(k! \cdot 4^k)$ time
algorithm.
  Our algorithm works by reducing the problem to finding an exact weight
perfect matching in a (multi-)graph with $O^*(2^k)$ edges, whose weights are
integers of the order of $O^*(2^k)$. To solve the matching problem in the
desired time, we give a variant of the classic Mulmuley-Vazirani-Vazirani
algorithm with only a linear dependence on the edge weights and the number of
edges, which may be of independent interest.
  Moreover, we give a tight lower bound, under the Strong Exponential Time
Hypothesis (SETH), showing that the constant $2$ in the base of the exponent
cannot be further improved for Vector Bin Packing.
  Our techniques also lead to improved algorithms for Vector Multiple Knapsack,
Vector Bin Covering, and Perfect Matching with Hitting Constraints.
