状态压缩DP。
一行一行的处理,每行对应一个状态。每一行中,每个位置有2种状态,状态0表示该位置恰好填满,状态1表示该位置对应的下一行也被填上了。如果状态next可以由状态now转换来,则DP[i+1][next]+=DP[i][now]。
对于一个m*n的矩形,有m行,每行有2^n个状态,于是总的效率为O(m*2^n*2^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)。
大概流程就是这个样子,细节见代码。