关于错排公式以及扩展的一些小结论
错排问题
存在一个排列 ,求有多少个排列 满足 。
错排公式
令 为有 个元素的错排个数,显然 。
递推公式
我们会有一个递推公式:
考虑新加进来一个元素,肯定不能放到它原来的位置,那么就是放到其他 个位置中的一个。然后考虑另外一个被占位置的元素,如果它填到当前这个位置那么会剩下 需要错排那么就是 ,不填到当前这个位置那么就剩下所有数都一起错排 就是 。
容斥原理
这个显然是满足要求的一个计数,那么我们就可以枚举“犯了几个错误”,也就是至少有几个会在原位。
错排扩展
我们在之前那个问题上扩展一点,我们可以使得其中 个不存在限制。(也就是这个 个位置可以不满足 )
动态规划
这个可以用一个神奇的 去计数,令 为前 个数,有 个不存在限制。
显然对于 的时候我们可以和错排一样转移:
那么对于 的时候考虑新填一个元素造成的局面:
前面就是新填的元素放到自己位置,那么就和 的局面是一样的了,后面就是放到其他任意一个位置那么不难发现这个和 的局面是一样的。
这样就可以结束这个扩展问题了。(注意前面边界问题就行了)
组合数学
其实应该可以更优秀地解决这个问题,因为可以发现 和 的递推形式是一样的,所以我们可以 推出第一行并且预处理阶乘及其逆元,那么我们可以用一个组合数直接算上去就行了。
至于是否有更好的实现,我并不是很清楚。。。
ps: 本文来自 zhou888 在今天考试中推的神奇 ,很有启发~
__EOF__

本文作者:zjp_shadow
本文链接:https://www.cnblogs.com/zjp-shadow/p/9799132.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/zjp-shadow/p/9799132.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】