码迷,mamicode.com
首页 > 其他好文 > 详细

不容易系列之(4)——考新郎

时间:2019-08-02 20:46:29      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:--   class   cpp   clu   span   ima   sum   amp   for   

技术图片

这个道题就是求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;
}

  

不容易系列之(4)——考新郎

标签:--   class   cpp   clu   span   ima   sum   amp   for   

原文地址:https://www.cnblogs.com/mjn1/p/11290786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!