Skip to content

CF1845E Boxes and Balls 笔记

由贪心,对于一个 aa,他所耗费的步数是可以贪心求出的:即若 ai>aiai 不断往左移;否则往右移。并且在最优步数 s 往后想刷步数达到 k 步则只能选择一个球左右横跳,即 sk(mod2)

因此可以设 fi,j,s 表示考虑 ai 个位置,放了 j 个球,总共耗费了 s 步,假设 a 中第 j 个球位于 ax,则有

fi,j,sfi1,j1,s|axi|

时空复杂度均为 O(n3)

考虑优化状态拆贡献,对于位置 i 来说,在这个位置的操作次数就是 gi=|aiai|,并且相邻两个位置的贡献相差不会超过 1,由 gik,易得 g 的量级是 k 的。

fi,j,k 表示考虑前 i 个位置,gi=jgi=k 的方案数,枚举 a 这个位置放不放球

fi,j,kai=0/1fi1,jai+ai,k|jai+ai|

时间复杂度 O(nkk),空间复杂度可用滚动数组优化到 O(kk)

最近更新