状态压缩DP。
一行一行的处理,每行对应一个状态。每一行中,每个位置有2种状态,状态0表示该位置恰好填满,状态1表示该位置对应的下一行也被填上了。如果状态next可以由状态now转换来,则DP[i+1][next]+=DP[i][now]。
对于一个m*n的矩形,有m行,每行有2^n个状态,于是总的效率为O(m*2^n*2^n)。
大概流程就是这个样子,细节见代码。
本文介绍了一种使用状态压缩动态规划解决覆盖问题的方法。通过将每一行的状态表示为一个二进制数,每列有两种可能的状态,进而求解m*n矩阵所有合法覆盖方案的数量。文章详细解释了状态转移的过程及实现代码。
状态压缩DP。
一行一行的处理,每行对应一个状态。每一行中,每个位置有2种状态,状态0表示该位置恰好填满,状态1表示该位置对应的下一行也被填上了。如果状态next可以由状态now转换来,则DP[i+1][next]+=DP[i][now]。
对于一个m*n的矩形,有m行,每行有2^n个状态,于是总的效率为O(m*2^n*2^n)。
大概流程就是这个样子,细节见代码。

被折叠的 条评论
为什么被折叠?