专栏文章

题解:P14465 霞む夏の灯(ending)

P14465题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minby9ib
此快照首次捕获于
2025/12/01 23:54
3 个月前
此快照最后确认于
2025/12/01 23:54
3 个月前
查看原文
这里 pp 是题面中的 π\pi。考虑 dp,我们从 11nn 依次确定 pp,假设现在已经确定了 [1,i)[1,i)pp,需要确定 pip_i。如果 ipi<m|i-p_i|<m,贡献为 cipic_{|i-p_i|},否则贡献为 cmc_m
一个很自然的想法是状压 (im,i+m)(i-m,i+m) 这段区间,表示对于 j(im,i+m)j\in(i-m,i+m) 是否存在一个 pk=jp_k=j,如果存在 ii 就不能再选了。这样就能解决 pi(im,i+m)p_i\in(i-m,i+m) 的贡献。
对于 ipim|i-p_i|\geq m 的部分,转移系数并不好计算,考虑延迟钦定,再加一维状态 jj 表示 [1,i][1,i] 中有多少个 pii+mp_i \geq i+m,将这一部分的贡献在转移时考虑。
最终的状态定义 dpi,j,Sdp_{i,j,S} 表示考虑前 iipp,有 jjpi+mp \geq i+mSS 的含义如上文所述。状态数是 O(n222m1)O(n^22^{2m-1}) 的,单次转移枚举 pip_i 的情况 O(m)O(m),时间复杂度 O(n2m22m1)O(n^2m2^{2m-1})
转移细节上,我们先讨论 ki=1k_i=-1
假设从 dpi1,j,Sdp_{i-1,j,S} 转移到 ii,转移的时候每次需要考虑第 i+m1i+m-1 位是否要分配给前面某个 pki1mp_k\geq i-1-mkk,如果给的话有一个 jj 的系数。然后按照 pip_i 进行分类讨论:
  • pi(im,i+m)p_i\in(i-m,i+m):看 SS 对应位置是否被占了,如果没有,乘上系数 cipic_{|i-p_i|}
  • pii+mp_i \geq i+mjj 这一维 +1+1,乘上系数 cmc_m
  • piimp_i \leq i-m:有系数 cmc_m,还需要乘上 [1,im][1,i-m] 中空位的个数。相当于要算有多少个 kk 满足 pk>imp_k > i-m
对于 ki1\exist k_i \not= -1 的情况,就是系数比较麻烦,这是 dirty work,代码比较恶心,实现也因人而异吧。

评论

0 条评论,欢迎与作者交流。

正在加载评论...