题目
求把N*M的棋盘分割成若干个1*2的的长方形,有多少种方案。
例如当N=2,M=4时,共有5种方案。当N=2,M=3时,共有3种方案。
如下图所示:
输入格式
输入包含多组测试用例。
每组测试用例占一行,包含两个整数N和M。
当输入用例N=0,M=0时,表示输入终止,且该用例无需处理。
输出格式
每个测试用例输出一个结果,每个结果占一行。
数据范围
1≤N,M≤11
输入样例:
1 2
1 3
1 4
2 2
2 3
2 4
2 11
4 11
0 0
输出样例:
1
0
1
2
3
5
144
51205
代码
# 计算出所有合法状态
def legal_state(n):
state = [True] * (1 << n)
for i in range(1 << n):
cnt = 0 # 用于记录0的连续情况
for j in range(n):
if (i >> j) & 1:
if cnt & 1: state[i] = False
cnt = 0