题目

错排: 

当n个编号元素放在n个编号位置,错排的方法数记着D(n)

⒈把第n个元素放在一个位置,比如位置k,一共有(n-1)种方法;

⒉放编号为k的元素,这时有两种情况:

1°把它放到位置n,那么,对于剩下的(n-1)个元素,由于第k个元素放到了位置n,剩下(n-2)个元素就有D(n-2)种方法;

2°第k个元素不把它放到位置n,这时,对于这(n-1)个元素,有D(n-1)种方法;

于是有:D(n) = (n-1) [D(n-2) + D(n-1)]

D(4)=(1+2)·3=9 D(5)=(2+9)·4=44 D(6)=(9+44)·5=265,把前两个错排方法总数加起来乘以前一个被错排的数。

组合数:

  1. __int64 C(int n,int m)
  2. {
  3. if(m<n-m) m=n-m;
  4. __int64 ans=1;
  5. for(int i = m+1;i<=n;i++) ans*=i;
  6. for(int i=1 ;i<=n-m;i++ ) ans /=i;
  7. return ans;
  8. }

题目说:一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.

可见,要用到组合数,Cnm

① 先找到N个新郎中M个错一共有几种,显然是Cnm , ② 然后在求出M个数的错排个数,递推关系:f[n]=(n-1)*(f[n-1]+f[n-2])

代码:

  1. #include<stdio.h>
  2. __int64 C(int n,int m)
  3. {
  4. if(m<n-m) m=n-m;
  5. __int64 ans=1;
  6. for(int i = m+1;i<=n;i++) ans*=i;
  7. for(int i=1 ;i<=n-m;i++ ) ans /=i;
  8. return ans;
  9. }
  10. int main(){
  11. int n,m,N;
  12. __int64 f[21];
  13. f[1]=0;
  14. f[2]=1;
  15. for(int i=3;i<21;i++)
  16. {
  17. f[i]=(i-1)*(f[i-1]+f[i-2]);
  18. }
  19. scanf("%d",&N);
  20. while(N--)
  21. {
  22. scanf("%d%d",&n,&m);
  23. __int64 sum = C(n,m);
  24. // printf("sum=%d\n",sum);
  25. printf("%I64d\n",f[m]*sum);
  26. }
  27. return 0;
  28. }

hdu 2049 不容易系列之考新郎 && 对错排的详解的更多相关文章

  1. [js高手之路]深入浅出webpack系列2-配置文件webpack.config.js详解

    接着上文,重新在webpack文件夹下面新建一个项目文件夹demo2,然后用npm init --yes初始化项目的package.json配置文件,然后安装webpack( npm install ...

  2. [js高手之路]深入浅出webpack教程系列3-配置文件webpack.config.js详解(下)

    本文继续接着上文,继续写下webpack.config.js的其他配置用法. 一.把两个文件打包成一个,entry怎么配置? 在上文中的webpack.dev.config.js中,用数组配置entr ...

  3. [js高手之路]深入浅出webpack教程系列2-配置文件webpack.config.js详解(上)

    [js高手之路]深入浅出webpack教程系列索引目录: [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数 [js高手之路]深入浅出webpack教程系列2-配置文件we ...

  4. SpringBoot系列教程JPA之query使用姿势详解之基础篇

    前面的几篇文章分别介绍了CURD中的增删改,接下来进入最最常见的查询篇,看一下使用jpa进行db的记录查询时,可以怎么玩 本篇将介绍一些基础的查询使用姿势,主要包括根据字段查询,and/or/in/l ...

  5. SpringBoot系列教程JPA之delete使用姿势详解

    原文: 190702-SpringBoot系列教程JPA之delete使用姿势详解 常见db中的四个操作curd,前面的几篇博文分别介绍了insert,update,接下来我们看下delete的使用姿 ...

  6. [HDU 2049] 不容易系列之(4)——考新郎 (错排问题)

    不容易系列之(4)——考新郎 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2049 题目大意: 有N对新婚夫妇,其中所有的新娘站成一列,都盖上了红布. ...

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

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

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

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

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

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

随机推荐

  1. python中库学习

    一.numpy NumPy的主要对象是同种元素的多维数组.这是一个所有的元素都是一种类型.通过一个正整数元组索引的元素表格(通常是元素是数字).在NumPy中维度(dimensions)叫做轴(axe ...

  2. etcd ui

    https://github.com/henszey/etcd-browser docker build --build-arg http_proxy=http://109.105.4.17:3128 ...

  3. angularjs动态添加节点时,绑定到$scope中

    <html> <head> <meta charset="utf-8"/> <script src="https://cdn.b ...

  4. 如何搭建hibernate框架

    我写这篇博客,主要是想让大家能够快速上手hibernate,本人建议学习框架,应该一个框架一个框架学习,别一上手就三大框架整合,学习之类的.这里只是单独搭建hibernate框架,让大家 能够更好的上 ...

  5. A计划(BFS)

    A计划 http://acm.hdu.edu.cn/showproblem.php?pid=2102 Time Limit: 3000/1000 MS (Java/Others)    Memory ...

  6. python 安装scikit!!!

    首先,吐槽一下,真的是折腾好几天,一会更新这个,一会更新那个,总是各种奇葩问题诸如此类: cannot import check-build pip有新版本,需要更新(黄字) 其中scipy出错最多, ...

  7. python内置函数之attr【反射】

    #Auther Bob#--*--conding:utf-8 --*-- #我们来循序渐进的学习反射 import s1 #阶段1# def run():# url = input("请输入 ...

  8. N皇后问题12 · N-Queens

    [抄题]: n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击. 给定一个整数n,返回所有不同的n皇后问题的解决方案. 每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分 ...

  9. sublime text3 配置

    1.在sublime text官网下载安装文件并安装 http://www.sublimetext.com/ 2.安装sublime的package control 参考网址:https://pack ...

  10. Phalcon Framework的MVC结构及启动流程分析

    目前的项目中选择了Phalcon Framework作为未来一段时间的核心框架.技术选型的原因会单开一篇Blog另说,本次优先对Phalcon的MVC架构与启动流程进行分析说明,如有遗漏还望指出. P ...