CF1838E

原题

翻译

容易想到O(nm)的做法

dpi,j表示考虑前ib序列,已经匹配了前ja序列的方案数

我们可以贪心的让ai能匹配就匹配,换言之如果我们确定了aibj位置匹配上,那我们要保证在bj到和ai1匹配的位置中不能出现数字ai

容易得到递推柿子:

dpi,j=dpi1,j1+dpi1,j×(K1+[j=n])

其中×(K1)的原因是保证ai每次和最小的位置匹配,[j=n]则因为an在匹配后后面的部分可以随便选

我们发现这个做法不太能优化了,正难则反,我们考虑用总的贡献减去不合法的贡献


首先考虑总的情况,显然是km

对于不合法的贡献,我们不妨表示为匹配上了前i位但未匹配到i+1位的情况,我们不妨设它出现的方案数为fi

则我们可以得到fi=(mi)(k1)mi其中(mi)表示从m个中选i个位置,这些位置钦定他们匹配ai的前i位,k1的原因是对于序列b的每个位置j,如果他没有被钦定,他都要保证不能匹配到下一个被钦定的位置。对于最后若干个位置,因为我们让他不匹配到i+1,不妨理解成让m+1位置钦定为填ai+1,所以前面若干个位置不能填ai+1,所以也是k1种可能

最终复杂度O(logm+n)

posted @   FOX_konata  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示