  Subset-Sum is an NP-complete problem where one must decide if a multiset of
$n$ integers contains a subset whose elements sum to a target value $m$. The
best-known classical and quantum algorithms run in time $\tilde{O}(2^{n/2})$
and $\tilde{O}(2^{n/3})$, respectively, based on the well-known
meet-in-the-middle technique. Here we introduce a novel classical
dynamic-programming-based data structure with applications to Subset-Sum and a
number of variants, including Equal-Sums (where one seeks two disjoint subsets
with the same sum), 2-Subset-Sum (a relaxed version of Subset-Sum where each
item in the input set can be used twice in the summation), and Shifted-Sums, a
generalization of both of these variants, where one seeks two disjoint subsets
whose sums differ by some specified value.
  Given any modulus $p$, our data structure can be constructed in time
$O(n^2p)$, after which queries can be made in time $O(n^2)$ to the lists of
subsets summing to any value modulo $p$. We use this data structure in
combination with variable-time amplitude amplification and a new quantum pair
finding algorithm, extending the quantum claw finding algorithm to the multiple
solutions case, to give an $O(2^{0.504n})$ quantum algorithm for Shifted-Sums,
an improvement on the best-known $O(2^{0.773n})$ classical running time.
Incidentally, we obtain new $\tilde{O}(2^{n/2})$ and $\tilde{O}(2^{n/3})$
classical and quantum algorithms for Subset-Sum, not based on the seminal
meet-in-the-middle method. We also study Pigeonhole Equal-Sums and Pigeonhole
Modular Equal-Sums, where the existence of a solution is guaranteed by the
pigeonhole principle. For the former problem, we give faster classical and
quantum algorithms with running time $\tilde{O}(2^{n/2})$ and
$\tilde{O}(2^{2n/5})$, respectively. For the more general modular problem, we
give a classical algorithm that also runs in time $\tilde{O}(2^{n/2})$.
