题目

错排: 

当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,把前两个错排方法总数加起来乘以前一个被错排的数。

组合数:

__int64 C(int n,int m)
{
if(m<n-m) m=n-m;
__int64 ans=1;
for(int i = m+1;i<=n;i++) ans*=i;
for(int i=1 ;i<=n-m;i++ ) ans /=i;
return ans;
}

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

可见,要用到组合数,Cnm

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

代码:

#include<stdio.h>
__int64 C(int n,int m)
{
if(m<n-m) m=n-m;
__int64 ans=1;
for(int i = m+1;i<=n;i++) ans*=i;
for(int i=1 ;i<=n-m;i++ ) ans /=i;
return ans;
}
int main(){
int n,m,N;
__int64 f[21];
f[1]=0;
f[2]=1;
for(int i=3;i<21;i++)
{
f[i]=(i-1)*(f[i-1]+f[i-2]);
}
scanf("%d",&N);
while(N--)
{
scanf("%d%d",&n,&m); __int64 sum = C(n,m);
// printf("sum=%d\n",sum);
printf("%I64d\n",f[m]*sum);
}
return 0;
}

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. 使用CXF发布的WebService报错:org.apache.cxf.interceptor.Fault: The given SOAPAction does not match an operation

    场景:JAVA语言使用CXF搭建WebService发布报错 错误信息:org.apache.cxf.interceptor.Fault: The given SOAPAction does not ...

  2. 自定义worker的方法,及一例

    自定义的worker用于处理各种特殊需求. 有网友想用html_json提取雪球网(https://xueqiu.com/)的数据,可是雪球网用了反爬虫技术,网站要求有cookies才能访问到json ...

  3. frame标签使用

    今天在做onebyone作业的时候,为了使自己的页面更加美观,我便使用了frame框架,百度了他的用法,总结如下 frame,是网页开发必须掌握的知识.例如后台架构.局部刷新,页面分割,都是frame ...

  4. js中的变量提升(hoisting)

    来看如下代码: function HelloJS(){ var array = [1,2,3,4,5]; for(var i in array){ } alert(i); } HelloJS(); a ...

  5. 在MyEclipse Tomcat可以运行但是在Tomcat 6.x上却不可以运行

  6. 无法访问部署在linux上的Tomcat服务器解决方案

    笔者使用环境:CentOS 6.4  Windows7  tomcat7 主要原因是linux开启了防火墙,有两种解决方案,一种是关闭防火墙,另外一种是开放所要访问的端口 1.关闭防火墙(非常不建议) ...

  7. nginx常用配置说明

    nginx的主配置(nginx.conf)说明 #worker进程数量 worker_processes 1; #错误日志 error_log logs/error.log; #进程ID文件 pid ...

  8. 对于某些浏览器不支持placeholder的解决办法

    $(function () { if (!placeholderSupport()) { $('[placeholder]').focus(function () { var input = $(th ...

  9. Nginx 分析access日志文件

    Nginx Access Log日志统计分析常用命令 IP相关统计 统计IP访问量 awk '{print $1}' access.log | sort -n | uniq | wc -l 查看某一时 ...

  10. FutureTask详解

    1 基本概念 1.1 Callable与Future Runnable封装一个异步运行的任务,可以把它想象成为一个没有参数和返回值的异步方法.Callable与Runnable类似,但是有返回值.Ca ...