国庆期间,省城刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的:
首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排; 然后,让各位新郎寻找自己的新娘.每人只准找一个,并且不允许多人找一个. 最后,揭开盖头,如果找错了对象就要当众跪搓衣板... 看来做新郎也不是容易的事情... 假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.

Input
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C行数据,每行包含两个整数N和M ( 1 < M <= N <= 20 )。

Output
对于每个测试实例,请输出一共有多少种发生这种情况的可能,每个实例的输出占一行。

Sample Input
2
2 2
3 2
Sample Output
1
3


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


(1)
N个新郎中M个错一共有几种,显然是C(m,n)=n!/(m!*(n-m)!)。即C(m,n)=n!/m!/(n-m)!

(2)
M个数的错排个数,递推关系:f[n]=(n-1)*(f[n-1]+f[n-2])

详细推导过程:
错排的情况:
首先考虑,如果开始有n-1个新郎,并且这n-1个人都已经完成了错排(有f(n-1)种可能),现在又来了一个人,那么后来的第n个人可以通过用自己的新娘去和那n-1个人中的任意一个交换,来实现n个人都错排。这种情况有(n-1)*f[n-1]种可能;

另外,如果开始的n-1个人不是都错排,那么要想使第n个人过来与其中一个交换后实现错排的话就必须满足两个条件:
①那n-1个人中只有一个人选到了自己的新娘,也就是说有n-2个人都已经错排了。
②第n个人必须和那个选到自己新娘的人去交换,但那个选到自己新娘的人可以是n-1个人中的任意一个。这种情况有(n-1)*f[n-2]种可能。

其他情况都不能满足n个人错排。
因此递推关系:f[n]=(n-1)*(f[n-1]+f[n-2])。


#include <iostream>
using namespace std;
int main()
{long long arr[22];arr[0]=1;arr[1]=1;for(int i=2;i<=20;i++){arr[i]=arr[i-1]*i;}long long num[22];num[1]=0;num[2]=1;for(int i=3;i<=20;i++) num[i]=(i-1)*(num[i-1]+num[i-2]);int c;cin>>c;int n,m;while(c--){cin>>n>>m;long long result=arr[n]/arr[m]/arr[n-m]*num[m];cout<<result<<endl;}return 0;
}

转载于:https://www.cnblogs.com/xiaomulei/p/10113919.html

【排列组合】ZSC1076: 数学、不容易系列之三——考新郎相关推荐

  1. 组合数学 (三): 排列组合的数学逻辑

    排列组合的数学逻辑 前言 排列 圆排列 项链排列 组合 n 个相同的小球放到 m 个相同的盒子里 允许空盒子 不允许空盒子 n 个不同的小球放到 m 个相同的盒子里 不允许空盒子 允许空盒子 n 个相 ...

  2. Cmn递推函数c语言,Cmn排列组合 高三数学知识点总结归纳5篇精选

    高三学生很快就会面临继续学业或事业的选择.面对重要的人生选择,是否考虑清楚了?这对于没有社会经验的学生来说,无疑是个困难的想选择.如何度过这重要又紧张的一年,我们可以从提高学习效率来着手!下面就是小编 ...

  3. 零基础学Python———求一个字符串的每个字符重新组合排列python排列组合的数学运算(递归法)

    1.数学知识温习 全排列的公式为: Anm:A _n^m : Anm​: 以 " AABBCC " 为例,全排列的公式有: A66=6!:A _6^6 = 6! : A66​=6! ...

  4. 秒杀排列组合(上)————排列篇

    首先为什么要写排列组合?因为排列组合在数学中占有重要的地位,其与概率论也有密切关系:并且排列组合问题在求职的笔试,面试出现的概率特别高,而我在网上又没有搜到比较全面题型的文章:同时,我觉得编写排列组合 ...

  5. 秒杀排列组合(下)————组合篇

    首先为什么要写排列组合?因为排列组合在数学中占有重要的地位,其与概率论也有密切关系:并且排列组合问题在求职的笔试,面试出现的概率特别高,而我在网上又没有搜到比较全面题型的文章:同时,我觉得编写排列组合 ...

  6. 信奥中的数学:排列组合

    排列组合题型总结课程(一) 排列组合题型总结课程(一)_哔哩哔哩_bilibili 排列组合的公式 排列组合的公式_百度知道 [Manim动画]如何以可视化视角直观理解排列组合? [Manim动画]如 ...

  7. Algorithm:【Algorithm算法进阶之路】之算法中的数学编程相关习题(时间速度、进制转换、排列组合、条件概率、斐波那契数列)

    Algorithm:[Algorithm算法进阶之路]之算法中的数学编程相关习题(时间速度.进制转换.排列组合.条件概率.斐波那契数列) 目录 时间速度 排列组合 进制转换 条件概率 斐波那契数列 时 ...

  8. 计算机组装错题整理,数学排列组合部分错题精选.docx

    数学排列组合部分错题精选 数学复习易做易错题选 排列组合易错题正误解析 排列组合问题类型繁多.方法丰富.富于变化,稍不注意,极易出错.本文选择一些在教学中学生常见的错误进行正误解析,以飨读者. 1没有 ...

  9. 【一级讲解】不可思议唤来不可思议β——数学排列组合

    不可思议唤来不可思议β Time Limit: 1 Sec Memory Limit: 128 MB Description In the world line 1.048596% 双叶理央因为&qu ...

  10. 放回c41_数学排列组合C41C43怎么算

    展开全部 C41=C43=(4*3*2)/(3*2*1)=4 . 公式:C(n,m)=A(n,m)∧2/m!=A(n,m)/m!:  C(n,m)=C(n,n-m).(其中n≥m) 组合介绍: 组合是 ...

最新文章

  1. BUUCTF(pwn)mrctf2020_easyoverflow
  2. BCP utility in Sybase(Unix Environment)
  3. python调用cplex_python - 如何使用docplex(python)在优化问题中建模约束? - SO中文参考 - www.soinside.com...
  4. iphone静音键失灵_知否 | 为何大部分安卓机 都不学iPhone加入静音键?
  5. 网页里如何使用js禁用控制台
  6. nginx负载分发情况日志输出
  7. [Uva10641]Barisal Stadium(区间dp)
  8. 【Python】pymysql模块处理Mysql数据库
  9. html表格怎么改圆角边框,Table元素设置圆角border
  10. DEDECMS之九 文章采集
  11. Ubuntu安装OpenCV4记录
  12. logistic回归列线图(nomogram)的多种绘制方法
  13. 学习编程需要安装的基础软件整理(建议收藏)
  14. php源码网站安装教程,php源码安装教程(php源码网站搭建方法和过程)
  15. 论文笔记——ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks
  16. 习惯,到底有多重要?
  17. 达梦 DM 执行SQL报字符串截断如何分析定位/超长文本截取
  18. 服务器渲染技术jsp
  19. Javascript JS 网页分享到QQ空间QQ,java实现qq分享,url带参数的方法
  20. MS SQL2016的安装

热门文章

  1. 云起智慧中心连接华为_华为新款鸿蒙产品企业智慧屏亮相:可连接电脑和手机多屏协同工作...
  2. mysql5.6 主从 延迟_MySQL5.6升级5.7时,出现主从延迟问题排查过程
  3. PAT (Basic Level) Practice1030 完美数列
  4. The “QtRunWork“ task returned false but did not log an error
  5. Linux开发_多线程编程
  6. 魅族魅蓝note3完美开启usb调试模式的经验
  7. 11.05T5 另类背包
  8. Monkey King
  9. 《Windows 8 权威指南》——2.10 几招解决Windows 8 Metro应用打不开的问题
  10. Java Date Time 教程-System.currentTimeMillis()