题目描述
一个 N × M 的方格矩阵,每一个方格中包含一个字符 O 或者字符 X。要求矩阵中不存在连续一行 3 个 X 或者连续一列 3 个 X。
问这样的矩阵一共有多少种?
输入格式
输入一行包含两个整数 N 和 M。
输出格式
输出一个整数代表答案。
样例输入
2 3
样例输出
49
提示
对于所有评测用例,1 ≤ N, M ≤ 5。
代码(状态压缩dp)
n, m =map(int,input().split())
row =[]
for i in range(2**m):
a = bin(i)
if '111' in str(a):
continue
else:
row.append(i)
dp = [[[0 for k in range(2**m)] for j in range(2**m)] for i in range(n)]
for i in row:
dp[0][i][0]=1
for i in range(1,n):
for p in row:
for k in row:
for j in row:
if j&k&p==0:
dp[i][j][k]+=dp[i-1][k][p]
ans =0
for j in row:
ans+=sum(dp[n-1][j])
print(ans)