比较简单的插头 DP 题。
考虑把一个 L 型的东西看做一条拐了一次弯的路径,可以在插头上区分插头所在路径是否已经拐过弯。
设 1 表示未拐弯,2 表示已拐弯。
按照插头类型分类讨论 (i,j) 的决策:
无左插头和上插头。
- 以 (i,j) 为一个 L 型的拐点,并令这个 L 型向右方和下方延伸。即在当前格子添加类型为 2 的右插头和下插头各一个。
- 以 (i,j) 为一个 L 型的一端。即在当前格子添加类型为 1 的右插头或下插头一个。
上插头类型 1,无左插头。
- 一个由上而下延伸的 L 型经过 (i,j)。即在当前格子添加类型为 1 的下插头一个。
- 以 (i,j) 为一个由上而下延伸的 L 型的拐点,并令这个 L 型从此向右延伸。即在当前格子添加类型为 2 的右插头一个。
左插头类型 1,无上插头。 类比上述情况。
上插头类型 2,无左插头。
- 一个由上而下延伸的 L 型经过 (i,j)。即在当前格子添加类型为 2 的下插头一个。
- 以 (i,j) 为一个由上而下延伸的 L 型的一端。即不在当前格子添加任何插头。
左插头类型 2,无上插头。 类比上述情况。
左插头、上插头均为类型 1。 以 (i,j) 为一个 L 型的拐点。即不在当前格子添加任何插头。
注意不添加插头的 3 种情况需要统计答案(当且仅当该格子是最后一个没有障碍的格子)。
代码:
1 |
|