状态压缩dp
- 蒙德里安的梦想
- 状态表示:
- 属性:方案的数量,表示将棋盘分割成若干个 1×2 的长方形的方式的数量。
- 集合:棋盘的状态,通常可以用一个二维数组或二进制状态来表示。
- 状态计算:
- 集合划分:在这个问题中,我们可以将棋盘的状态划分为不同的位置和状态。具体而言,对于每个位置,可以有两种状态:竖直放置的长方形或横向放置的长方形。通过这种划分,我们可以确定状态之间的转移关系。
- 状态转移方程:根据问题的要求和状态的划分,我们设计状态转移方程来计算方案的数量。具体地,对于每个位置,我们考虑其前一个位置和当前位置的状态,根据是否放置长方形来计算方案的数量。最终,我们通过动态规划的思想,根据已知状态推导出未知状态,得到最终的方案数量。
- 状态表示:
- 哈米尔路径
- 状态表示:
- 属性:最短Hamilton路径的长度,表示从起点0到终点n-1经过每个点恰好一次的最短路径长度。
- 集合:图中的顶点集合和路径的状态,可以用一个二进制状态表示当前已经访问过的顶点。
- 状态计算:
- 集合划分:在这个问题中,我们可以将集合划分为已经访问过的顶点集合和未访问过的顶点集合。通过这种划分,我们可以确定状态之间的转移关系。
- 状态转移方程:根据问题的要求和状态的划分,我们设计状态转移方程来计算最短Hamilton路径的长度。具体地,我们考虑当前状态下的所有可能的下一步,选择其中最优的路径。通过动态规划的思想,我们根据已知状态推导出未知状态,得到最短Hamilton路径的长度。
- 状态表示: