AcWing 291. 蒙德里安的梦想 python
原题链接
中等
作者:
申侠
,
2020-11-06 20:33:49
,
所有人可见
,
阅读 353
N = 1 << 12
f = [[0 for _ in range(N)] for _ in range(12)]
st = [True] * N
while True:
n,m = map(int, input().split())
if n == 0 and m ==0:
break
N = 1 << n
for i in range(len(f)):
for j in range(len(f[0])):
f[i][j] = 0
for i in range(N):
st[i] = True
for i in range(N):
cnt = 0
for j in range(n):
if not i >> j & 1:
cnt += 1
else:
if cnt & 1:
st[i] = False
cnt = 0
if cnt & 1:
st[i] = False
f[0][0] = 1
for i in range(1,m+1):
for j in range(N):
for k in range(N):
if (j & k) == 0 and st[j | k]:
f[i][j] += f[i-1][k]
print(f[m][0])