错位排列

全错位排列最经典的问题是装错信封问题。

我们把信封问题转换一下:

对于1−n1-n1−n 共n个数字组成的序列中,每个数字仅出现一次,求每个数字跟位置完全不对应的总方案数。

  1. 对于第一个位置上的数字1它有 n−1n-1n−1 种方案数
  2. 对于第二个位置上的数字2有两种放法:
    ①.放到1的位置上:
    这时候就是已经把1和2放置好,剩下n−2n-2n−2个位置dp[n−2]dp[n-2]dp[n−2]

    ②.放到后面n−2n-2n−2个位置上
    这种情况其实就转换到了放数字1的情况(只是总数减一)
    它就相当于数字1已经放好了 还剩下n−1n-1n−1个位置和n−1n-1n−1个数,数字2不能在位置1处,也就是dp[n−1]dp[n-1]dp[n−1]的状态。

    初始化状态:dp[1]=0(只有一个数字),dp[2]=1(两个数字)dp[1]=0(只有一个数字),dp[2]=1(两个数字)dp[1]=0(只有一个数字),dp[2]=1(两个数字)
    转移 :第i个数有i−1i-1i−1种方案,会转移到两种状态。
    dp[i]=(i−1)∗(dp[i−1]+dp[i−2]);dp[i]=(i-1)*(dp[i-1]+dp[i-2]);dp[i]=(i−1)∗(dp[i−1]+dp[i−2]);

实现代码:dp[i]表示i个数错位排列的方案数dp[i]表示i个数错位排列的方案数dp[i]表示i个数错位排列的方案数

 dp[1] = 0; dp[2] = 1;for(int i=3; i<=maxn; i++){dp[i] = (i-1) * (dp[i-1] + dp[i-2]) % mod;}

错位排列超详解(组合数学)相关推荐

  1. Android vector标签 PathData 画图超详解

    此文章来源于https://www.cnblogs.com/yuhanghzsd/p/5466846.html点击打开链接 Android vector标签 PathData 画图超详解 SVG是一种 ...

  2. Mybatis案例超详解

    Mybatis案例超详解 前言: 本来是想像之前一样继续跟新Mybatis,但由于种种原因,迟迟没有更新,快开学了,学了一个暑假,博客也更新了不少,我觉得我得缓缓,先整合一些案例练练,等我再成熟点理解 ...

  3. python控制手机模拟器_Appium+python自动化之连接模拟器并启动淘宝APP(超详解)...

    简介 上一篇讲解完模拟器的安装.配置好以后,就好比我们手机已经买好,并且系统已经做好了,就差我们用数据线和电脑连接开始实战了,这篇宏哥就带着小伙伴们和童鞋们趁热打铁,讲解和分享一下如何连接模拟器(电脑 ...

  4. js打印三角形超详解

    js打印三角形超详解 j控制星星的总行数,i控制每行星星的打印个数 打印图形如下: (1) (2) //str=""用来存储星星// 理解步骤1:在一行输出6个星星如何操作,在循环 ...

  5. 线性规划之单纯形法【超详解+图解】-转载

    线性规划之单纯形法[超详解+图解] 目录 1.作用 2.线性规划的一般形式 5.1几何意义 5.2如何判断最优 5.3如何选择新的基变量 5.4如何选择被替换的基变量 5.5终止条件 标准型: 转化为 ...

  6. 【平衡小车制作】(七)串级PID调参及平衡成果展示(超详解)

      大家好,我是小政.本篇文章我将针对PID调参进行详细的讲解,让每位小伙伴能够对比例.积分.微分三个参数如何调节有更加清晰的理解. 一.调参步骤 确立机械中值 直立环(内环)--Kp极性.Kp大小. ...

  7. 面试-Java【之】(revers)递归实现字符串倒序排列(详解)

    面试-Java[之](revers)递归实现字符串倒序排列(详解) 实现源码详解 <目录:Java-JDBC学习> <幕> 实现源码详解 public class Test { ...

  8. 蓝牙模块XY-MBD07A的介绍及使用方法(超详解)

    蓝牙模块XY-MBD07A的介绍及使用方法(超详解) 蓝牙XY-MBD07A是主从一体的蓝牙串口模块,简单的说,当蓝牙设备与蓝牙设备配对连接成功后,我们可以忽视蓝牙内部的通信协议,直接将将蓝牙当做串口 ...

  9. C/C++实现蛇形矩阵(超详解)【沈七】

    C/C++实现蛇形矩阵(超详解) 题目链接 题目描述 输入样例 题解部分 完整代码 完结散花 悄悄告诉你: 参考文章 萌新报道! 唤我沈七就行嘿嘿. 大一软件工程在读. 菜鸡蒟蒻想在博客中记录一些算法 ...

最新文章

  1. linux环境insight安装与使用
  2. .NET中栈和堆的比较(二)
  3. python 时间模块 time datetime calendar
  4. 【Elasticsearch】留意Elasticsearch 7.x 可能无法选主的问题
  5. [hdu1242]优先队列
  6. 洛谷P2023 [AHOI2009]维护序列
  7. python mysql传入多个参数
  8. 高频功率放大器的设计实现
  9. 入驻华为云·云享专家了~
  10. 人力资源职位英文缩写汇总(人力资源岗位术语缩写)
  11. 如何使用大华SDK工具查询和播放设备录像?
  12. ios浏览器打开app页面提示“浏览器打不开该网页,因为网址无效”
  13. 利用云端GPU训练YOLOv5模型
  14. 小程序复制文字、保存图片
  15. 全球与中国2,5二甲基苯酚市场现状及未来发展趋势
  16. 胖哈勃杯第十三届CUIT校赛web500wp及出题心得
  17. 地铁供电系统原理图_地铁工作原理?
  18. java解压缩/压缩/加密压缩/加密解压缩 ZIP4J---ZIP文件压缩与解压缩学习
  19. Linux 使用openssl ca方式签发证书
  20. Linux开机和关机记录查看

热门文章

  1. java练手代码大全手机版_20个Java练手项目,献给嗜血如狂的人
  2. Linux如何准确判断rpm,yum,dnf进程是否阻塞[运行]?
  3. 手动生成token_微信小程序登录换取token的教程
  4. JAVA看云判断天气_怎样看云识别天气?
  5. DMotion - 基于DOTS的动画框架和状态机
  6. C#编程-36:数组与ArrayList基础复习_彭世瑜_新浪博客
  7. gradle入门(一)从Groovy DSL转化为KTS
  8. fputc()和fgetc()应用
  9. Web安全之业务逻辑漏洞
  10. deepin下安装yah3c出错(no such device)