例题:对于所有 ,求出 表示有多少长度为 的排列 ,前 个位置要满足 .
回顾一下错排数的递推式是如何求得的?单独拎出最后一个位置 及其代表的数 ,先考虑长度 的错排,讨论将位置 以及数 插入时不同方式的方案数之和。
尝试对这个方法进行抽象化:
对一个满足一些条件的组合对象进行计数时,想要通过规模更小的问题的答案来获得当前问题答案,考虑去除组合对象中的若干元素,然后考虑将这些元素在规模更小的组合对象中插入后,方案数之和是多少。
能否沿用这个思路解决例题?
方法一:考虑将一个限制不能冲突的位置及其代表的数加入,首先考虑这个数放入了前面哪个位置。
第一种情况是放入一个有限制的位置,有 种放法。放入之后剩下一个单独的随便放的数,和一个单独的随便放的位置。把这两个看作同一个编号,那么就化为了 个数及位置,有 个限制的情况。
第二种情况是放入一个无限制的位置,有 种放法。放入之后同理可以将单独的数和单独的位置看作同一个编号,就化为了 个数及位置,有 个限制的情况。
所以递推式为 .
方法二:考虑将一个无限制的位置及数放入。
第一种情况是放入一个有限制的位置,可推得这种情况的方案数 ;
第二种情况是放入一个无限制的位置,这种情况的方案数 .
递推式为 .
值得注意的是 时不存在无限制的数,所以需要初始化的是 .
方法三:考虑将一个有限制的位置及数放入,假装没有限制先任意选 ,再容斥掉不合法的情况(强制那个有限制的冲突) .
递推式为 .
虽然是经典思路,但是需要总结,而总结就需要一些比较抽象的描述,但是抽象的描述又离不开题目否则难以理解。
一次尝试,暂且一记,是否有时间有意愿去整理另论。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?