CF1861E Non-Intersecting Subpermutations

原题

翻译

一道很显然是 dp 的题

我们设 fi,j 表示钦定了前 i 个数,其中 [ij+1,i] 这些数中没有重复(就是说有成为 1K 的排列的可能性)时的成本之和

我们可以用刷表法来表示这个 dp 的转移方法:

{fi+1,j+1fi,j×(Kj)(j<K1)fi+1,j+1fi,j+1(j=K1)fi+1,1fi,j×K(j=K)fi+1,kfi,j(jK,k[1,j])

其中第一行表示这些数还没构成一个排列,我们想让他构成一个排列,从 (Kj) 个数中选一个;第二行表示马上就要构成一个排列了,我们要把贡献加上去;第三行表示我们已经构成了一个排列,下一列可以从 K 个数中随便填;第四行表示我们填了 [ij+1,i] 这些数中已经出现了的一个,使得我们把这个常为 j 的可能成为排列的值破坏成了常为 k 的值

要是你认为这么做就算完了,那你就太天真了!(一转攻势

我们看第二个式子,他的贡献显然不是 +1 这么简单,而应该是加上前 i 个数中, [ij+1,i] 这些数没有重复的方案数才对,因此第二个式子计算贡献是不对的

我们考虑再设一个 gi,j 表示前 i 个数中, [ij+1,i] 这些数没有重复的方案数

我们改一下第二个式子:fi+1,j+1fi,j+gi+1,K,完美解决

但还不完美,对于第四个式子的计算,我们要花费 O(K) 的时间,总复杂度变成了 O(nK2) ,不足以通过此题

这个简单,显然的差分优化 dp ,最终复杂度 O(nK)

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