zoukankan      html  css  js  c++  java
  • [HDU 2049] 不容易系列之(4)——考新郎 (错排问题)

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

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2049

    题目大意:

    有N对新婚夫妇,其中所有的新娘站成一列,都盖上了红布。然后让新郎去找新娘,每个新郎只能找一个新娘,而且不能一个对一个。问其中M个新郎找错新娘的情况有多少种。

    思考过程:

    这其实就是一个错排问题+排列组合问题
    首先要从N个新郎当中找出M个找错的。即C(N,M)。其次是对这M组新人进行错排,为D(M)。而且两者之间是乘法原则

    错排和排列组合地推公式:

    由于是第一次写排列组合这块的内容,写一下如何用递推公式求 C(N,M) 和 D(M)。
    (1)求C(N,M)。如果我们要从N个数当中抽出M个数,那么对于N个数当中的任何一个数来说,只有被抽到和没有被抽到两种情况。不妨设K,如果没有被抽到,则需要在剩下的 N - 1 个数当中抽 M 个。即C(N - 1,M)。如果K被抽到了,那么只需要在剩下的 N - 1 个数当中抽 M - 1 个。即C(N - 1, M - 1)
    所以,C(N,M) = C(N - 1,M - 1) + C(N - 1,M)
    (2)求D(N)。对于{1,2,3,……N} 这N个数,如果1在K的位置,K在1的位置,(由于K可以为剩下N - 1 个数当中任意一个,所以有N - 1 种选法)那么剩下的 N - 2 个数错排即可,为(N - 1)* D(N - 2)。如果K在1的位置,而1不在K的位置,那么把1当做K,相当于对N - 1 个数进行错排。为 (N - 1)* D(N - 1)
    所以,D(N)= (N - 1)* (D(N - 1)+ D(N - 2))

    代码:

    /*
        错排
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<map>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<set>
    #include<ctype.h>
    #include<algorithm>
    #include<string>
    #define PI acos(-1.0)
    #define maxn 1000
    #define INF 1<<25
    #define mem(a, b) memset(a, b, sizeof(a))
    typedef long long ll;
    using namespace std;
    int C[22][22];
    ll D[22];
    void init()
    {
        for (int i = 0; i <=20; i++)
            C[i][0] = 1;
        C[1][1] = 1;
        for (int i = 2; i <= 20; i++)
            for (int j = 1; j <= i; j++)
                C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
    
        D[1] = 0, D[2] = 1;
        for (ll i = 3; i <= 20; i++)
            D[i] = (i - 1) * (D[i - 1] + D[i - 2]);
    }
    int main ()
    {
        init();
        int c, n ,m;
        cin>>c;
        while(c--)
        {
            scanf("%d%d", &n, &m);
            ll sum;
            if (m * 2 > n) sum = C[n][n - m];
            else sum = C[n][m];
            sum *= D[m];
            cout<<sum<<endl;
        }
        return 0;
    }
    


  • 相关阅读:
    免费证书Let’s Encrypt
    kubernetes中使用ServiceAccount创建kubectl config 文件
    kubectl alias auto complete
    kubernetes dashboard permission errors
    du 与df 统计系统磁盘不一致原因与解决方法
    大访问量、高并发网站优化
    React的Sass配置
    转:Zepto的使用以及注意事项
    转: zepto的使用方法
    Extjs4 修改combox中store的数据
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3458874.html
Copyright © 2011-2022 走看看