Four patterns you've seen:
State compression: When tracking "which elements used," represent it as a bitmask. The state space becomes subsets.
Transitions via bit operations: Set bits, clear bits, check bits. These run in and keep your code clean.
Assignment problems: When matching items to slots in order, alone suffices. Process items one by one.
SOS DP: When you need sums over all subsets (or supersets), don't iterate submasks naively. Use the technique. The constraint is your signal. Anything larger and won't fit in time or memory.