zoukankan      html  css  js  c++  java
  • 不容易系列之(4)——考新郎

    这个道题就是求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
    ", C(n, m) * f(m));
    	}
    	
    	return 0;
    }
    

      

  • 相关阅读:
    Nuget:aliyun-openapi-sdk
    iptables简述
    openOffice安装
    bash:command not found
    linux nc命令
    linux命令帮助
    linux用户管理
    LDAP 后缀操作
    LDAP缓存命令
    LDAP索引及缓存优化
  • 原文地址:https://www.cnblogs.com/mjn1/p/11290786.html
Copyright © 2011-2022 走看看