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