不容易系列之(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;
}

[HDU 2049] 不容易系列之(4)——考新郎 (错排问题)的更多相关文章

  1. hdu 2049 不容易系列之(4)——考新郎 (错排递推)

    当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推. 第一步,把第n个元素放在一个 ...

  2. hdu 2049 不easy系列之(4)——考新郎

    不easy系列之(4)--考新郎 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. HDU 2049 不容易系列之(4)——考新郎 (递推,含Cmn公式)

    不容易系列之(4)——考新郎 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  4. hdu2049 不容易系列之(4)——考新郎 错排+组合 一共有N对新婚夫妇,N个新娘随机坐成一排,每个新郎只能选一个, 其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.

    不容易系列之(4)——考新郎 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  5. HDU2049 不容易系列之(4)考新郎 —— 错排

    题目链接:https://vjudge.net/problem/HDU-2049 不容易系列之(4)——考新郎 Time Limit: 2000/1000 MS (Java/Others)    Me ...

  6. HDU 2049 不容易系列之(4)——考新郎 (错排+组合)

    题目链接. Problem Description 国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体 ...

  7. E - 不容易系列之(4)――考新郎 错排数公式

    国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的:  首先,给每位新娘打扮得几乎一模一 ...

  8. hdu 2049 不容易系列之(4)——考新郎

    在本博AC代码中,求CNM用的是Anm/amm没用阶乘的形式,两者皆可 #include <stdio.h> int main(void) { long long a,b,larr[21] ...

  9. HDU 2049 不容易系列之(4)——考新郎( 错排 )

    链接:传送门 思路:错排水题,从N个人中选出M个人进行错排,即 C(n,m)*d[m] 补充:组合数C(n,m)能用double计算吗?第二部分有解释 Part 1. 分别求出来组合数的分子和分母然后 ...

随机推荐

  1. css3基础教程十三征服CSS3选择器

    :enabled选择器 在Web的表单中,有些表单元素有可用(“:enabled”)和不可用(“:disabled”)状态,比如输入框,密码框,复选框等.在默认情况之下,这些表单元素都处在可用状态.那 ...

  2. 性能测试实践-linux

    需求:线上系统性能优化,查找服务器和线上系统瓶颈 根据线上经验数据及期望值定量 数据   up down 线上数据 50 500 测试数据 100 500~2000+ 测试数据 200 500~200 ...

  3. linux 监控系统缓存和cpu

    a=`free |head -n 2 |tail -n 1 |awk '{print $7}'`if [ $a -ge 900000 ];then     sync && echo 1 ...

  4. JS获取浏览器可视区域的尺寸

    所谓可视区域是指能看得见的区域,即在浏览器中能看到页面的区域(高度与宽度).刚刚使用 document.body.clientHeight 来获取可视区域的高度得到的却是整个文档的高度,然后在cnbl ...

  5. css编译工具Sass中混合宏,继承,占位符分别在什么时候使用

    //SCSS中混合宏使用 @mixin mt($var){ margin-top: $var; } .block { @include mt(5px); span { display:block; @ ...

  6. PHP不依赖系统自动执行机制

    不依赖系统,以及不依赖yii事物机制,则考虑人为触发.触发可以写在总体的公共页面上,但是考虑到对数据库以及WWW服务器的压力问题,程序的延迟问题,需要对执行函数进行一些优化. 首先,我们考虑对数据库的 ...

  7. jquery 判断页面滚动到底部

    $(document).scrollTop() 获取垂直滚动的距离 即当前滚动的地方的窗口顶端到整个页面顶端的距离$(document).scrollLeft() 这是获取水平滚动条的距离获取顶端 只 ...

  8. IOS 命令行安装备忘

    1. 首先要越狱 2. 新增BIGBOSS或者苹果核的源 3. 安装MobileTerminal和MobileTerm Backgrounder (用于后台运行命令),最好r520以上版本,R530还 ...

  9. H - A+B for Input-Output Practice (VII)

      Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description You ...

  10. how to optimize javascript performance

    https://developers.google.com/speed/articles/optimizing-javascript http://developer.yahoo.com/perfor ...