原题
翻译
容易想到O(nm)的做法
dpi,j表示考虑前i个b序列,已经匹配了前j个a序列的方案数
我们可以贪心的让ai能匹配就匹配,换言之如果我们确定了ai在bj位置匹配上,那我们要保证在bj到和ai−1匹配的位置中不能出现数字ai
容易得到递推柿子:
其中×(K−1)的原因是保证ai每次和最小的位置匹配,[j=n]则因为an在匹配后后面的部分可以随便选
我们发现这个做法不太能优化了,正难则反,我们考虑用总的贡献减去不合法的贡献
首先考虑总的情况,显然是km
对于不合法的贡献,我们不妨表示为匹配上了前i位但未匹配到i+1位的情况,我们不妨设它出现的方案数为fi
则我们可以得到fi=(mi)(k−1)m−i其中(mi)表示从m个中选i个位置,这些位置钦定他们匹配ai的前i位,k−1的原因是对于序列b的每个位置j,如果他没有被钦定,他都要保证不能匹配到下一个被钦定的位置。对于最后若干个位置,因为我们让他不匹配到i+1,不妨理解成让m+1位置钦定为填ai+1,所以前面若干个位置不能填ai+1,所以也是k−1种可能
最终复杂度O(logm+n)
哦懂了懂了,等比数列求和。
(3) 到 (4) 是怎么转移的,大佬orz
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?