从csdn上看到的
解题思路:
为了不重复统计,我们每次从最左上方的空格处开始放置。对于内哪些格子已经被容覆盖过了,只需要用一个bool数组来维护就可以了。首先,黑色的格子不能被覆盖,因此used里对应的位置总是false。对于白色的格子,如果要在(i,j)的位置放置砖块,那么由于总是从最左上方的可放的格子开始放置,因此对于(i&x27;,j‘) < (i,j)(按字典序比较)的(i&x27;,j&x27;)总有used[i&x27;][j&x27;] true成立。
此外,由于砖块的大小为1*2,因此对于每一列j&x27;在满足(i&x27;,j&x27;)< (i , j)的所有i‘中,除了最小的i’之外,都满足used[i&x27;][j&x27;] false。因此,不确定的只有每一列里还没有查询的格子中最上面的一个,共m个。从而可以把m个格子通过状态压缩编码进行记忆话搜索。