P3182 [HAOI2016] 放棋子(递推&高精)
本题可转化为错排问题。
每一行有一列不能填,那么对列进行问题转化,有列,每个列都不能填一个数字,这不就是错排。
错排的递推式:
第个数有种选择,选择的位置是,若数 放在位置,则有选择,否则有种选择。
代码
if __name__ == '__main__':
n = int(input())
f = [0 for i in range(n + 1)]
f[2] = 1
for i in range(3, n + 1):
f[i] = (i - 1) * (f[i - 1] + f[i - 2])
print(f[n])