---
id: dp-bitmasks
title: "Dynamic Programming on Bitmasks"
author: Michael Cao
prerequisites: 
 - Bit Operations
 - Gold - Introduction to Dynamic Programming
description: DP problems that require iterating over subsets.
frequency: 1
---

import { Problem } from "../models";

export const metadata = {
  problems: {
    general: [
      new Problem("CSES", "Hamiltonian Flights", "1690", "Easy", false, ["Bitmasks"], ""),
      new Problem("CSES", "Elevator Rides", "1653", "Normal", false, ["Bitmasks"], ""),
      new Problem("ojuz", "IZhO Bank", "IZhO14_bank", "Normal", false, ["Bitmasks"], ""),
      new Problem("YS", "Max Indep Set", "maximum_independent_set", "Hard", false, ["Bitmasks", "Meet in Middle"], ""),
    ],
  }
};

Has not been the solution to any platinum problem, but appeared in old gold and can be used for subtasks.

## Tutorial

 - [PAPS 9.4](https://www.csc.kth.se/~jsannemo/slask/main.pdf)
 - CPH 10 (Bit manipulation), 19.2 (Hamiltonian Paths)
 - [Dynamic Programming Over Subsets (Codeforces)](https://codeforces.com/blog/entry/337)
 - [Dynamic Programming and Bit Masking (HackerEarth)](https://www.hackerearth.com/practice/algorithms/dynamic-programming/bit-masking/tutorial/)

## Problems

<problems-list problems={metadata.problems.general} />

 - [Old Gold - Moovie Mooving](http://www.usaco.org/index.php?page=viewproblem2&cpid=515)
 - [AC Matching](https://atcoder.jp/contests/dp/tasks/dp_o)
 - [CF Square Subsets](https://codeforces.com/contest/895/problem/C)
 - [CF Guards in the Storehouse](https://codeforces.com/problemset/problem/845/F)
 - [Kattis Cat & Mice](https://open.kattis.com/problems/catandmice) [](66)
   - plus a bit of geometry