<aside> 💡 全称为:状态压缩 DP
</aside>
// 可以根据 i 的范围调整 bitset 的大小
std::string int_to_bit_str(int i) {
std::bitset<8> bits(i);
return bits.to_string();
}
因为状压 DP 下,通常使用二进制来表示某些东西在某一时刻下的状态,然后需要根据这些状态,遍历它的所有子集,进行暴力搜索。
举例:
[LC 2305] 把 n 个饼干,分给 k 个孩子,我们定义 DP 为:
<aside> 💡 dp[i][j], i 是前 i 个孩子,j 是这些孩子可以分配的饼干的状态,范围为 0 ~ 2^n - 1
</aside>
假如有 3 个饼干,那么状态有: