真晦气,被抽到讲题
题目简述
传送门(戳我)
给定一个 N ∗ M N*M N∗M的矩阵,求最多能放多少个十字形,且每个十字的中心不被其他十字覆盖。
分析(二进制)
考虑每个块是否能放炮兵只与其上两行对应的位置是否放置过炮兵有关,所以在第i行的转移只需考虑第i-1和第i-2行的状态。
设置状态:
每一行的状态用一个 M M M位的二进制数表示(当然用十进制存储,其中第 p p p 位为 1 / 0 1/0 1/0 表示该行是 / / /否放置了炮兵。
f [ i , j , k ] f[i,j,k] f[i,j,k] 表示第 i i i 行的状态为 j j j,第 i − 1 i-1 i−1 的状态为 k k k 时,前 i i i 行最多能放置炮兵的个数。
首先考虑预处理一个集合:
- S S S,包含相邻两个 1 1 1 的距离不小于 3 3