状压dp

学习。

状压 DP 是动态规划的一种,通过将状态压缩为整数来达到优化转移的目的。

使用 状压dp 的题目的特点是:数据范围非常小,n 不超过 20,且暴力解常是阶乘数量级。


Eg1:蒙德里安的梦想 - AcWing。(压缩每一列元素的状态)

Eg2:糖果 - 蓝桥杯 (省赛A组) 。(压缩每一包糖果的状态)

Eg3:[SCOI2005]互不侵犯 - 洛谷。(压缩每一行国王的状态)

Eg4:最短Hamilton路径 - AcWing。(压缩经过的点的状态)

Eg5:吃奶酪 - 洛谷。(同上,类题)

Eg6:[POI2004] PRZ - 洛谷。(压缩已选队员的状态)

Eg7:[USACO06NOV] Corn Fields G - 洛谷。(压缩每一列元素的状态)

Eg8:[USACO13NOV] No Change G - 洛谷(待做)

补充一个二进制枚举子集的技巧:


个人感觉状压dp的难点主要在 dp数组意义的选取状态转移的循环方式状态转移方程的建立