不容易系列之——考新郎
Posted mjn1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不容易系列之——考新郎相关的知识,希望对你有一定的参考价值。
这个道题就是求N中有多少中M个数的错排。
因此先找到N个新郎中M个错一共有几种,显然是CMN=N!/(M!*(N-M)!)。即CMN=N!/M!/(N-M)!。
然后在求出M个数的错排个数,递推关系:f[n]=(n-1)*(f[n-1]+f[n-2])
#include <cstdio> long long int m[30]; long long int C(int n, int m) long long int sum = 1, j = 1; for(int i = n; i >= n - m + 1; -- i) sum = sum * i / j; j ++; return sum; long long int f(int n) m[2] = 1; m[3] = 2; for(int i = 4; i <= n; ++ i) m[i] = (i - 1) * (m[i - 1] + m[i - 2]); return m[n]; int main() int c, n, m; scanf("%d", &c); while(c --) scanf("%d %d", &n, &m); printf("%lld\\n", C(n, m) * f(m)); return 0;
以上是关于不容易系列之——考新郎的主要内容,如果未能解决你的问题,请参考以下文章