错排公式
2016-04-25 20:04
267 查看
前言
错排公式,即把n本可区分书打乱使得每本书不在原本位置的方案数。容斥原理得到的递推式
我在某题题解里讲过,现在复制过来。设dp[i]表示i个元素的错排方案数。
什么意思呢?就是关于i的排列其中不存在任意的a[j]=j。
我们可以使用容斥原理:
例如dp
,其实就是要满足n个条件——第i个条件为a[i]!=i
那么合法方案数=至少不满足0个条件-至少不满足1个条件+至少不满足2个条件-至少不满足3个条件+……
也就是
dp[n]=∑ni=0(−1)i∗Cin∗(n−i)!
dp[n]=∑ni=0(−1)i∗n!i!∗(n−i)!∗(n−i)!
dp[n]=∑ni=0(−1)i∗n!i!
dp[n]=(−1)n+∑n−1i=0(−1)i∗n!i!
dp[n]=(−1)n+n∗∑n−1i=0(−1)i∗(n−1)!i!
dp[n]=(−1)n+n∗dp[n−1]
另一种递推式
如果i到了j,我们就让i向j连一条有向边。合法的方案便是形成许多环且没有自环。
考虑dp
,有两种可能。
在n-1的图上,n随便连一条有向边到一个结点,然后连向这个结点的结点改为连向n。相当于把n并进了这个环。n可以连向的结点有n-1种可能。
在n-2的图上,增加一个大小为2的环,除了n以外另一个点的编号未知,有n-1种可能。
于是错排公式有了另一种递推式
dp[n]=(n−1)∗(dp[n−1]+dp[n−2])
相关文章推荐
- nodejs完整登陆交互
- 试试Linux下的ip命令,ifconfig已经过时了
- linux 虚拟机详细搭建过程
- Codeforces 669D
- 数组
- linux读写锁
- 云存储及其分布式文件系统
- R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错
- 机器人正催生社会戾气?
- 《清单革命》
- 每日Scrum--No.7
- poj2955Brackets区间dp(括号匹配)
- mysql服务不能启动,解决方法
- 杭州--4.25
- 线性代数(笔记二) MIT公开课(来源网易云课堂)
- DaoFactory.java
- Java修饰符的访问权限
- python learning-------装饰器
- pycharm快捷键、常用设置、包管理
- java double转string