bzoj4563[Haoi2016]放棋子

bzoj4563[Haoi2016]放棋子

题意:

给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列。要求你放N枚棋子(障碍的位置不能放棋子),也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案。N≤200。
题解:
发现在障碍在什么位置和答案无关。因此可以把棋子摆成左上-右下对角线,然后就是错排问题(一个长度为n的排列,要求每个元素不能放在与自己编号相同的位置上,问有多少种方案满足条件)了。错排公式:f[i]=(f[i-1]+f[i-2])*(i-1),特别的,f[0]=1,f[1]=0。本弱太懒了,不想写高精度,写了个python,结果因为不会写wa了好几发QAQ
代码:
1 n=int(raw_input())
2 a=1
3 b=0
4 for i in range(2,n+1):
5     c=(a+b)*(i-1)
6     a=b
7     b=c
8 print b

//python的高亮好丑啊!

20160814

原文地址:https://www.cnblogs.com/YuanZiming/p/5778008.html