求把 N×M 的棋盘分割成若干个 1×2 的的长方形,有多少种方案。
例如当 N=2,M=4 时,共有 5 种方案。当 N=2,M=3 时,共有 3 种方案。
如下图所示:
输入格式
输入包含多组测试用例。
每组测试用例占一行,包含两个整数 N 和 M。
当输入用例 N=0,M=0 时,表示输入终止,且该用例无需处理。
输出格式
每个测试用例输出一个结果,每个结果占一行。
状态压缩dp模板题
既然是状压dp,定义一个dp[][]
表示在当前行当前状态下的方案数
仔细分析可以发现,当前一行只会被前一行影响
也就是说前一行横着放的时候这一行才会被影响
也就是说只要横着放,我们就把这两行的状态定为1
竖着放就定为0
但是这样还是会t
所以我们要先把不可以填满的情况都去掉
首先不可能有连续奇数个0状态
还有其他情况但我懒得打
for(int i=0;i<(1<<n);i++)
{
int cnt=0;
st[i]=true;
for(int j=0;