将前 nnn 个正整数不重不漏地划分进 mmm 个非空集合 A1,A2,…,AmA1,A2,…,AmA1,A2,…,Am.
一个划分是守序的,当且仅当存在 (1,2,…,m)(1,2,…,m)(1,2,…,m) 的环排列 (p1,p2,…,pm)(p_1,p_2,…,p_m)(p1,p2,…,pm) 使得 max{Api}>min{Api−1}\max\{A_{p_i}\}>\min\{A_{p_{i−1}}\}max{Api}>min{Api−1}. 其中 p0=pmp_0=p_mp0=pm.
两个划分本质不同,当且仅当存在两个数在一种划分中属于同一个集合,而在另一种划分中属于不同的集合。
求本质不同的守序划分数,对 998244353998244353998244353 取模。
考场上想了一个小时的性质,然后随便猜了个结论,拿到了 70pts70pts70pts ,被降智了只写了个扇贝 DpDpDp,还要暴力枚举最后一个集合 n4n^4n4 转移。
实际做法就是猜结论猜到区间之间不存在任何一个点都没有被覆盖,也就说两两连接。
用 f[i][j][k]f[i][j][k]f[i][j][k] 表示前 iii 个数字,已经用了 jjj 个集合,还有 kkk 个集合没有封闭。
O(1)O(1)O(1) 转移滚动数组即可。
本文探讨了一种关于正整数划分的有序问题,利用动态规划解决,重点在于描述了如何通过O(1)转移来避免暴力枚举。核心算法是通过判断区间覆盖情况,猜测并验证一个高效结论,从而减少计算复杂度。
337

被折叠的 条评论
为什么被折叠?



