资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
在一个n*n的棋盘中,每个格子中至多放置一个车,且要保证任何两个车都不能相互攻击,有多少中放法(车与车之间是没有差别的)
输入格式
包含一个正整数n
输出格式
一个整数,表示放置车的方法数
样例输入
2
样例输出
7
数据规模和约定
n<=8
【样例解释】一个车都不放为1种,放置一个车有4种,放置2个车有2种。
# 开发人:HGC
# 开发时间:2021-11-06 15:46
n=int(input())
ans=0
def check(x,y):
for i in range(len(rec)):
if rec[i]==y:
return False
if rec[x]!=-1:
return False
return True
def dfs(x,row):
global ans,rec
if row==x:
fenzi=1
for i in range(1,n+1):
fenzi*=i
fenmu=1
for i in range(1,n-x+1):
fenmu*=i
for i in range(1,x+1):
fenmu*=i
xishu=fenzi/fenmu
ans+=xishu*xishu
return
for col in range(x):
if check(row,col)==True:
rec[row]=col
dfs(x,row+1)
rec[row]=-1
for i in range(n+1):
if i == 0:
ans += 1
elif i == 1:
ans += n * n
else:
rec=[-1]*i
dfs(i,0)
print(int(ans))